从rake任务调用控制器

我想从rake任务调用控制器动作。 我的问题是什么方法最好准备http请求? 感谢所有提示。

编辑:请别人提示吗? 我试过这个而不是工作:

controller_obj = Controller.new controller.your_method 

我有这个例外:

 rake aborted! uninitialized constant Controller 

Edit2:我试过了:

 sess = ActionController::Integration::Session.new sess.post('/route', 'codes=3') 

但我得到了(我在rake文件中要求’action_controller / integration’):

 rake aborted! cannot load such file -- action_controller/integration 

 task :use_controller_method_in_rake => :environment do session = ActionDispatch::Integration::Session.new(Rails.application) session.get "/foo" session.post "/bar", {my_post_params: 'foobar'} end 

您应该将该操作的行为移动到模型类,然后将该操作与该模型类的实例一起使用。 这是标准方法。

controller/action 移动model class推荐 )。 在您的佣金任务中,执行以下操作….

 model_obj = Model.new model_obj.your_instance_method 

仍然 希望调用控制器操作,然后您应该在rake任务中创建控制器的实例,并使用该实例调用该操作(如果该方法是实例方法。)

 controller_obj = Controller.new controller.your_method 

谢谢@ chris-finne,这非常有帮助。 请注意,session.response.body是您可以访问结果的地方。 这是我在rake任务中使用的方法:

 def api_json_get(url, params={}) @rails_session ||= ActionDispatch::Integration::Session.new(Rails.application) @rails_session.get(url, { :format => :json }.merge(params)) JSON.parse(@rails_session.response.body) end 

注意我正在记忆会话对象,因为它实例化的速度很慢,而且我多次调用这个方法。