0

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

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

campaign_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_jobgem。

配置/应用程序.rb

config.active_job.queue_adapter = :delayed_job

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

非常感谢任何帮助。

4

2 回答 2

0

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

于 2015-07-03T22:48:04.360 回答
0

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

在 Rails 中实现延迟作业的简单步骤

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

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

rake jobs:work

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

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

于 2015-07-05T18:20:29.437 回答