如何正确诊断500错误(Rails,Passenger,Nginx,Postgres)

时间:2012-04-02 01:49:35

标签: ruby-on-rails ruby-on-rails-3 nginx passenger capistrano

我正在艰难地从生产中运行的应用程序中诊断出500错误。我之前已经开始工作了,但是在通过Capastrano重新部署之后我无法实现它。

以下是事实:

  1. 服务器设置为nginx + passenger,我正在使用 的PostgreSQL。
  2. 静态资产正常运行,因为我可以在浏览器中正常访问它们。
  3. 我可以通过RAILS_ENV=production bundle exec rails console访问rails控制台并执行Active Record操作(例如 从数据库中检索数据。)
  4. 在控制台中,我可以运行app.get("/"),它也会返回500错误(在首次显示运行加载的查询之后) 模特)。
  5. 永远不会写入production.log文件。我已经为它设置了777权限。我还将日志级别设置为 :调试没有显示任何内容。
  6. nginx日志(乘客也使用)显示没有错误迹象,只是通知缓存未命中。
  7. 因为没有记录任何使用,我不知道该怎么做。我已经尝试在没有帮助的情况下在整个app目录上设置完全权限。多次重启服务器,什么都没有。数据库就在那里,rails可以清楚地与它通信。我不知道我做了什么让它第一次运行。我只是不知道为什么rails没有输出任何到日志中。

4 个答案:

答案 0 :(得分:7)

好的,我想出来了。该应用程序在开发模式下运行良好,因此我知道特定于生产的东西正在搞砸它。我进入了config / environments / production.rb并更改了这些设置:

# Full error reports are disabled and caching is turned on
config.consider_all_requests_local       = false # changed from true
config.action_controller.perform_caching = true # changed from false

然后在重新启动乘客之后,rails向我展示了错误/ stacktrace。结果我忘了预编译资产管道了!

答案 1 :(得分:3)

要检查的事项

1)您确定在生产环境中运行吗? 检查development.log文件中是否有任何条目

2)设置您的应用,以便在完整堆栈跟踪发生500错误时通过电子邮件发送给您。我使用Exception Notifier gem,但还有很多其他解决方案。

3)在控制台中检查应用程序时,您确定在生产模式下启动控制台吗?应用程序可能根本没有启动,您只是忘记设置生产参数,从而认为应用程序运行正常而不是。

4)您是否收到nginx 500错误或Rails 500错误?如果nginx那么很可能你的应用程序根本没有启动,并且你的日志文件中不太可能出现任何rails错误。资产是静态文件,导航到它们证明了你的存在。

5)您确定要检查服务器上的正确文件夹吗?听起来真的很愚蠢,但是capistrano可能会将应用程序部署到一个文件夹,该文件夹与ninx正在为您的应用程序查找的文件夹不同,因此请仔细检查capistrano正在部署的文件夹以及nginx正在寻找的文件夹。

只是一个建议,我会使用独角兽而不是乘客。用nginx很棒。

答案 2 :(得分:2)

我的问题是乘客的日志文件(error.log)什么都没有。然后它就是一个轮换日志问题。运行

 passenger-config reopen-logs

解决了我的问题。 More

答案 3 :(得分:0)

您是否尝试在开发模式下运行以查看错误是否自行报告?