我有一个延迟的工作,无论何时用户发布一首歌,这个工作都会向用户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
延迟工作
我如何在生产中调用此方法并使其在后台运行?
答案 0 :(得分:7)
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