【问题标题】:Rails 4.2: Active Job After RedirectRails 4.2:重定向后的活动作业
【发布时间】:2015-09-21 18:00:34
【问题描述】:

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

config/application.rb

config.active_job.queue_adapter = :delayed_job

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

非常感谢任何帮助。

【问题讨论】:

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


    【解决方案1】:

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

    Simple Steps to Implement Delayed Job in Rails

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

    如果应用程序处于开发模式,我们将使用以下 rake 代替任务。

    rake jobs:work
    

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • redirect_to 的顺序没有影响,仍然得到相同的结果。无论如何,作业都存在,它只是不运行。
      猜你喜欢
      • 2015-07-03
      • 2015-10-06
      • 2015-04-04
      • 1970-01-01
      • 1970-01-01
      • 2016-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多