这是我第一次使用 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。
非常感谢任何帮助。
答案 0 :(得分:0)
您必须在redirect_to之前执行该作业,因为您的方式rails执行重定向并且从不调用作业
答案 1 :(得分:0)
我的印象是,我可以创建一个延迟的作业集,以便在某个时间运行,并在开发时,观察它运行。看来,在开发模式下,我必须手动启动作业。根据这篇博客..
Simple Steps to Implement Delayed Job in Rails
启动作业流程有两种方法可以做到这一点。
如果应用程序处于开发模式,我们将使用下面的rake 而不是任务。
rake jobs:work
如果应用程序处于生产模式,则最好使用 “delayed_job”脚本。
我还了解到,这个rake
任务可以与服务器一起运行。让它保持运行,并在您与应用程序交互时执行作业。