使用Nginx时Delayed_Job NoMethodError

时间:2013-04-11 14:26:40

标签: nginx ruby-on-rails-3.2 delayed-job nomethoderror

我在使用Nginx在我的生产环境中实现 Delayed_Job_Active_Record gem时遇到了问题。用户提交“联系我们”表单,Nginx调用相关的控制器操作,以下代码行失败:

@contact.delay.send_contact_form

相关方法是:

def send_contact_form
   ContactMailer.contact_us(self).deliver
end  


发展环境:好的

  • 在我的本地机器上,我有Webrick提供的页面。一切运行正常,延迟的工作通过'Delayed_Jobs'表格并发送电子邮件。


生产环境 - Rails控制台:好的

  • 如果我在服务器上创建@contact并手动调用@contact.delay.send_contact_form,则延迟的作业将通过延迟的作业表并发送电子邮件。


制作环境 - Webrick:好的

  • 在服务器上,如果我启动了一个Webrick服务器I并通过Web界面输入@contact的数据,然后提交作业通过延迟的作业表并发送电子邮件。


生产环境 - Nginx:错误

  • 该应用程序目前由Nginx提供。
  • 如果我通过Nginx访问界面并输入@contact的数据并提交页面挂起。
  • 生产日志在控制器操作上给出以下错误(参考上面的行):

      

    NoMethodError(#< Contact:0x000000052962b0>的未定义方法`delay')

  •   
  
  我还确认Rails,Ruby和Delayed_Job_Active_Record和Daemons gems的版本在两种环境中都是相同的。

任何帮助都会非常感激,因为我已经坚持了一段时间。我想找到一个适用于Nginx的解决方案,它提供了与'延迟工作'相同的功能。

感谢。

1 个答案:

答案 0 :(得分:0)

事实证明问题在于Unicorn / Nginx在部署代码更新时没有重新启动,导致它们的配置不正确。将Devise和其他宝石添加到应用程序时也会出现问题。

解决方案最初是在部署后登录VPS shell(通过Capistrano)并运行以下命令:

重启Unicorn:

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

其中* unicorn_esg *是我对deploy.rb配置中使用的应用程序的Unicorn引用。

重新启动Nginx:

sudo service nginx restart

下一步是将其合并到deploy.rb脚本的末尾,以便在每次部署结束时自动运行。