簡體   English   中英

從rake任務調用控制器

[英]Call controller from rake task

我想從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

注意我正在記憶會話對象,因為它實例化的速度很慢,而且我多次調用這個方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM