1

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

我正在使用Ryan Bates Facebook Open Graph Railscast'delayed_job_active_record'中看到的 gem

用户.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

post_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延迟作业我如何在生产中调用此方法并使其在后台运行?

非常感谢!

4

2 回答 2

7

rake jobs:workdelay_job 就像rails srails 的命令 - 它在执行命令的控制台(shell)的主进程中运行。这意味着当包含它的控制台(shell)停止运行(即您注销)时它停止运行。

您将希望改为运行RAILS_ENV=production script/delayed_job start- 启动 delay_job 队列作为守护进程(后台进程),就像rails s -nrails 一样。

于 2012-10-10T16:39:17.333 回答
2

该脚本执行以下操作:

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

这将在后台运行delayed_job。

如果您想在前台运行,您可以创建一个简单的脚本,该脚本将具有:

worker = Delayed::Worker.new({}) # or add options
worker.start
于 2012-10-10T16:39:40.973 回答