Call controller from rake task

前端 未结 3 1607
时光说笑
时光说笑 2020-12-06 18:03

I would like to call controller action from rake task. My question is what method is the best to prepare http request? Thanks for all tips.

Edit: Have someone anothe

相关标签:
3条回答
  • 2020-12-06 18:52

    You should move that action's behavior to a model class, then use that action with the instance of that model class. This is the standard approach.

    move controller/action to a model class (Recommended). In your rake task, do the following....

    model_obj = Model.new
    model_obj.your_instance_method
    

    And still you want to call controller action then you should create an instance of your controller in your rake task and call that action with that instance(if that method is an instance method.)

    controller_obj = Controller.new
    controller.your_method
    
    0 讨论(0)
  • 2020-12-06 18:54
    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
    
    0 讨论(0)
  • 2020-12-06 19:03

    Thanks @chris-finne, that was very helpful. Note that session.response.body is where you can access the results. Here's an method I'm using in a rake task:

    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
    

    Notice I'm memoizing the session object since it's quite slow to instantiate and I'm calling this method many times.

    0 讨论(0)
提交回复
热议问题