2013-04-11 25 views
0

我在使用Nginx製作環境中執行Delayed_Job_Active_Record gem時遇到問題。用戶提交「聯繫我們」的形式,相關的控制器動作是由Nginx的調用,下面的代碼行失敗:Delayed_Job使用Nginx時的NoMethodError

​​

凡有關方法是:

def send_contact_form 
    ContactMailer.contact_us(self).deliver 
end 


發展ENV:OK

  • 在我的本地機器上,我有Webrick提供的頁面。一切運行良好,延期工作通過'Delayed_Jobs'表發送併發送電子郵件。


生產信封 - Rails的控制檯:OK

  • 在服務器上,如果我創建@contact和手動調用@contact.delay.send_contact_form,延遲工作經歷延遲的作業表,可以收發電子郵件發送。


生產信封 - 使用WEBrick:OK

  • 在服務器上,如果我啓動了一個導軌通過Web界面我和@contact輸入數據,然後提交的WEBrick服務器該工作經過延遲的工作表併發送電子郵件。


生產信封 - Nginx的:ERROR

  • 該應用程序是目前Nginx的服務。
  • 如果我通過Nginx訪問界面並輸入@contact的數據並提交頁面掛起。
  • 生產日誌給出關於控制器動作下面的錯誤,(參考上面的線):

    NoMethodError(未定義的方法`延遲」爲#<聯繫人:0x000000052962b0>)


我也證實,Rails,Ruby和Delayed_Job_Active_Record和Daemons gems的版本在兩種環境中都是相同的。

任何幫助將不勝感激,因爲我一直卡在這一個一段時間。我想找到一個適用於Nginx的解決方案,它給了我與'延遲工作'相同的功能。

謝謝。

回答

0

事實證明,問題出在Unicorn/Nginx未部署代碼更新時未重新啓動,導致它們的配置不正確。將Devise和其他寶石添加到應用程序時也會出現這個問題。

的溶液首先登錄到部署後的VPS殼,(通過Capistrano的),並運行以下命令:

重啓獨角獸:

/etc/init.d/unicorn_esg stop 
/etc/init.d/unicorn_esg start 

其中* unicorn_esg *是獨角獸參考我的deploy.rb配置中使用的應用程序。

重啓Nginx的:

sudo service nginx restart 

下一步將納入deploy.rb腳本結束這一所以它在每次部署結束時自動運行。