2012-10-10 49 views
1

我有一個延遲的作業,每當用戶發佈一首歌曲時都會調用,此作業會向用戶Facebook牆發送一個活動帖子。這是工作的代碼並在控制器中調用它。如何調用delayed_job_active_record(rake作業:工作)外部製作env

我用'delayed_job_active_record'寶石作爲Ryan Bates Facebook Open Graph Railscast

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延遲作業 我怎麼能在生產中調用這種方法,並保持它在後臺運行?

非常感謝!

回答

7

rake jobs:work在delayed_job中就像是用於rails的rails s命令 - 它在執行命令的控制檯(shell)的主進程中運行。意味着當包含它的控制檯(shell)停止運行(即註銷)時它會停止運行。

您需要運行RAILS_ENV=production script/delayed_job start而不是 - 啓動delayed_job隊列作爲守護進程(後臺進程),如rails s -n對rails的啓動。

2

該腳本:

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

這將在後臺運行的delayed_job的。

如果你想在前臺運行,你可以創建一個簡單的腳本,將有:

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