2011-11-09 61 views
1

我正在使用delayed_job gem在我的rails應用程序中發送電子郵件。 delayed_job運行良好,但從最近5天開始,它不工作,並在delayed_job.log文件中拋出以下錯誤。在服務器上的生產環境中延遲作業失敗

 
2011-10-09T01:53:04+0530: [Worker(delayed_job host:backupserver pid:23953)] Syck::DomainType#private_group_join_request failed with NoMethodError: undefined method private_group_join_request' for # - 11 failed attempts 
2011-10-09T01:53:04+0530: [Worker(delayed_job host:backupserver pid:23953)] 1 jobs processed at 1.4503 j/s, 1 failed ... 
2011-10-09T01:54:40+0530: [Worker(delayed_job host:backupserver pid:23953)] Syck::DomainType#contact_us_email failed with NoMethodError: undefined method contact_us_email for # - 11 failed attempts 
2011-10-09T01:54:40+0530: [Worker(delayed_job host:backupserver pid:23953)] 1 jobs processed at 4.3384 j/s, 1 failed ... 

以下是我稱呼發送電子郵件的延遲作業的示例之一。

UserMailer.delay(:run_at => 10.seconds.from_now).contact_us_email(self) 

我開始延遲工作與

RAILS_ENV=production script/delayed_job start 

它在開發以及生產環境中正常工作我的本地機器上。

環境我正在使用Rails應用程序。

  • 滑軌3.0.8
  • 紅寶石1.9.2在Linux操作系統(Ubuntu的)
  • 耙0.9.2
  • delayed_job的2.1.4

這是相同 Undefined Method Error when creating delayed_job workers with script/delay_job

但解決方案不適合我。

+0

「未定義foo方法爲#」是奇 - 通常那種事是說了零未定義foo方法,然後問題是函數被調用nil對象上。你有什麼想法在你的環境中「#」是指什麼? –

+0

我發現延遲工作失敗的原因。按照http://stackoverflow.com/questions/6766431/undefined-method-error-when-creating-delayed-job-workers-with-script-delay-job給出的失敗的原因是libyaml包。軟件包已安裝在服務器上,但未安裝在本地計算機上。現在我已經在我的本地機器上安裝了相同的軟件包,並且它給了我相同的錯誤。這個錯誤發生在對數據庫進行反序列化時。 –

+0

Kaplesh:你不妨回答你自己的問題,這樣它就顯示爲已回答,其他人將從看到你如何解決問題中受益。 –

回答

5

我想通出。這是由於打包「libyaml」包,該包並未出現在本地系統上,而是安裝在服務器上。

0

當您部署了一些新代碼時,是否有可能沒有停止並啓動您的delayed_job worker?如果在部署之前運行的工作人員嘗試運行新方法,則會失敗。

+0

我已經嘗試過這種方法,但仍然無法正常工作。 –

0

工作進程中運行的YAML(或Syck)是否可能不知道有關方法?看一看:

https://github.com/collectiveidea/delayed_job/wiki/Common-problems#wiki-jobs_are_silently_removed_from_the_database

...的相關部分是:

一個序列化錯誤的常見原因是YAML引用 一類不知道的工人。如果是這樣的話,你可以添加

# file: config/initializers/custom.rb 
require 'my_custom_class' 

這將迫使my_custom_class工人啓動時加載。

+0

這看起來像什麼? '需要'用戶''?而且,這將加載用戶模型? – hellion

+0

@hellion:關閉。嘗試'需要'用戶' - 當然,這取決於你的路徑被正確設置等。我對您的環境不夠了解,無法給您一個完整的答案。 –

+0

謝謝,回覆@無畏傻瓜。 – hellion

0

我不得不在生產服務器上手動重啓我的獨角獸,因爲某些原因,cap部署並沒有爲我做。

所以我要做的就是:

sudo /etc/init.d/unicorn_myapp stop 
sudo /etc/init.d/unicorn_myapp start 

但麒麟無法啓動,所以只好

sudo rm /tmp/unicorn.my_app.sock 

而且

sudo /etc/init.d/unicorn_myapp start 
相關問題