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

时间:2015-07-03 21:44:10

标签: ruby-on-rails ruby ruby-on-rails-4 ruby-on-rails-4.2 rails-activejob

这是我第一次使用 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

这项工作的最佳方式是什么?

更新

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

配置/ application.rb中

config.active_job.queue_adapter = :delayed_job

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

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

Simple Steps to Implement Delayed Job in Rails

  

启动作业流程有两种方法可以做到这一点。

     

如果应用程序处于开发模式,我们将使用下面的rake   而不是任务。

rake jobs:work
     

如果应用程序处于生产模式,则最好使用   “delayed_job”脚本。

我还了解到,这个rake任务可以与服务器一起运行。让它保持运行,并在您与应用程序交互时执行作业。