2013-05-20 75 views
1

我正在運行一堆nginx,passenger,rails,delayed_job gem,它在Ubuntu LTS上從lib/tasks /運行import.rake任務。Rails延遲作業生產不會在類/工作代碼中發生變化

如果我將生產中的代碼更改爲import.rake。

我做了

RAILS_ENV=production script/delayed_job stop 
touch tmp/restart.txt 
ps aux | egrep '(PID|nginx)' 
sudo kill -HUP [PID] 
RAILS_ENV=production script/delayed_job start 

但是,它仍然不承認我的import.rake的變化。我不知道該怎麼做。也許有什麼我沒有想到的?

我跑

ps -ef | grep delayed_job 

,看看是否有任何揮之不去的工作,從上面我看到的運行delayed_job的停止命令後

[server_name] 9426 6168 0 18:46 pts/0 00:00:00 grep --color=auto delayed_job 

這不應該是一個問題。我也嘗試重新啓動服務器,但沒有幫助。

任何想法?

+0

您的延遲工作失敗或根本沒有運行?檢查這些有問題的作業可能會有幫助,並查看它是如何被序列化的。查看delayed_jobs表中處理程序列的值。它是否直接調用import.rake中的某些東西? –

回答

1

延遲工作序列化代碼的實例它入列,所以,除非你改變由你的耙的任務,而不是rake任務本身調用代碼重新部署也無濟於事。

要解決此問題,請將您在重新部署之間更改的代碼與通過延遲作業調用的代碼解耦。所以,與其MyLogic.delay.do_stuff,你可以這樣做:

class DelayedTask 
    def self.do_stuff 
    self.new.delay.execute 
    end 

    private 

    def execute 
    MyLogic.do_stuff 
    end 
end 

然後,只需調用DelayedTask.do_stuff從你的代碼,你可以在任何你想要的方式更改MyLogic.do_stuff(不改變方法名或PARAMS),螞蟻它將工作。

+0

目前,我的耙子任務包含一堆通過相冊並執行一些圖像處理和事情的代碼。您所說的是我可以將該代碼移入do_stuff方法,而不是使用import.rake腳本。正確? – jim

+0

是的,rake任務只應該調用你的業務邏輯代碼。如果您將任務的延遲從業務邏輯中分離出來,那麼當您更改某些內容時,pending_job任務將不太可能中斷。 – Spajus