Rails 4.2:重定向后的活动作业

Rails 4.2: Active Job After Redirect

这是我第一次使用 ActiveJob,所以我仍在思考细节。我有一个表单,当通过 Execute 按钮保存时,它会执行一些需要很长时间的 API 调用。

我希望页面无需长时间等待即可重定向到索引。这是我的控制器的创建操作..

campaigns_controller.rb

  def create
    @campaign = Campaign.new(campaign_params)

    if @campaign.save

        flash[:success] = "Campaign Successfully Saved!"
        redirect_to campaigns_path

        if params[:save_type] == 'Execute'
            FolderPushJob.perform_later(@campaign)
        end

    else
        flash[:error] = "There was a problem launching your Campaign."
        redirect_to new_campaign_path
    end
  end

...我的工作还处于婴儿期

folder_push_job.rb

class FolderPushJob < ActiveJob::Base
    queue_as :default

      def perform(campaign)
        ...some api calls..
      end

完成这项工作的最佳方法是什么?

更新

我发现的一个问题是我没有作业的后端,所以我安装了 delayed_job gem。

config/application.rb

config.active_job.queue_adapter = :delayed_job

现在它重定向并且 运行 根本不重定向作业。

非常感谢任何帮助。

您必须在 redirect_to 之前执行作业,因为您的方式 rails 执行重定向并且从不调用作业

我的印象是我可以在特定时间创建一个设置为 运行 的延迟作业,并在开发时观看它 运行。看来在开发模式下,我必须手动启动作业。根据这个博客..

Simple Steps to Implement Delayed Job in Rails

Start up the jobs process There are two ways to do this.

If application is in development mode, we would use the below rake task instead.

rake jobs:work

If application is in production mode, then it is preferred to use the “delayed_job” script.

我还了解到这个 rake 任务可以 运行 在服务器旁边。保留它 运行ning,它将在您与您的应用交互时执行这些工作。