如何调用delayed_job_active_record(rake jobs:work)外部生产环境

时间:2012-10-10 16:23:46

标签: ruby ruby-on-rails-3 delayed-job production-environment

我有一个延迟的工作,无论何时用户发布一首歌,这个工作都会向用户Facebook墙发送一个活动帖子。这是作业的代码并在控制器中调用它。

我正在使用Ryan Bates Facebook Open Graph Railscast

中显示的'delayed_job_active_record' gem

user.rb

def self.post_song(user_id, song_url)
    user = User.find(user_id)
    user.facebook.put_connections("me", "virtual_piano:post", song: song_url)
  end

posts_controller.rb

(upon successful save)
        User.delay.post_song(current_user.id, post_url(@post))

此作业使用标准rake jobs:work在开发模式下运行。

我见过有些人使用RAILS_ENV=production script/delayed_job start延迟工作 我如何在生产中调用此方法并使其在后台运行?

非常感谢!

2 个答案:

答案 0 :(得分:7)

delayed_job中的

rake jobs:work类似于rails的rails s命令 - 它在执行命令的控制台(shell)的主进程中运行。意味着当包含它的控制台(shell)停止运行(即你注销)时它停止运行。

您需要运行RAILS_ENV=production script/delayed_job start - 启动delayed_job队列作为守护程序(后台进程),如rails s -n为rails执行。

答案 1 :(得分:2)

脚本执行:

require 'delayed/command'
Delayed::Command.new(ARGV).daemonize

这将在后台运行delayed_job。

如果要在前台运行,可以创建一个简单的脚本:

worker = Delayed::Worker.new({}) # or add options
worker.start