【问题标题】:Delayed_Job NoMethodError when using Nginx使用 Nginx 时的 Delayed_Job NoMethodError
【发布时间】:2013-04-11 14:26:39
【问题描述】:

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

@contact.delay.send_contact_form

相关方法在哪里:

def send_contact_form
   ContactMailer.contact_us(self).deliver
end  


开发环境:OK

  • 在我的本地计算机上,我有 Webrick 提供的页面。一切正常,延迟的作业会通过“Delayed_Jobs”表并发送电子邮件。


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

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


生产环境 - Webrick:好的

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


生产环境 - Nginx:错误

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

    NoMethodError(#<0x000000052962b0>


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


    【解决方案1】:

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

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

    重启独角兽:

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

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

    重启 Nginx:

    sudo service nginx restart
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-22
      • 2011-08-09
      • 2011-07-18
      • 1970-01-01
      • 2011-07-18
      • 2011-05-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多