我在使用Nginx在我的生产环境中实现 Delayed_Job_Active_Record gem时遇到了问题。用户提交“联系我们”表单,Nginx调用相关的控制器操作,以下代码行失败:
@contact.delay.send_contact_form
相关方法是:
def send_contact_form
ContactMailer.contact_us(self).deliver
end
发展环境:好的
生产环境 - Rails控制台:好的
@contact
并手动调用@contact.delay.send_contact_form
,则延迟的作业将通过延迟的作业表并发送电子邮件。
制作环境 - Webrick:好的
@contact
的数据,然后提交作业通过延迟的作业表并发送电子邮件。
生产环境 - Nginx:错误
@contact
的数据并提交页面挂起。
NoMethodError(#< Contact:0x000000052962b0>的未定义方法`delay')
任何帮助都会非常感激,因为我已经坚持了一段时间。我想找到一个适用于Nginx的解决方案,它提供了与'延迟工作'相同的功能。
感谢。
答案 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脚本的末尾,以便在每次部署结束时自动运行。