从rake任务调用控制器

use*_*655 6 ruby ruby-on-rails http

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

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

controller_obj = Controller.new
controller.your_method
Run Code Online (Sandbox Code Playgroud)

我有这个例外:

rake aborted!
uninitialized constant Controller
Run Code Online (Sandbox Code Playgroud)

Edit2:我试过了:

sess = ActionController::Integration::Session.new
sess.post('/route', 'codes=3')
Run Code Online (Sandbox Code Playgroud)

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

rake aborted!
cannot load such file -- action_controller/integration
Run Code Online (Sandbox Code Playgroud)

chr*_*nne 9

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
Run Code Online (Sandbox Code Playgroud)


Alo*_*and 8

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

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

model_obj = Model.new
model_obj.your_instance_method
Run Code Online (Sandbox Code Playgroud)

而且还是打电话给控制器动作,那么你应该在你的rake任务创建控制器的一个实例,并调用与该实例的行动(如果该方法是一个实例方法.)

controller_obj = Controller.new
controller.your_method
Run Code Online (Sandbox Code Playgroud)