从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
注意我正在记忆会话对象,因为它实例化的速度很慢,而且我多次调用这个方法。