我正在艰难地从生产中运行的应用程序中诊断出500错误。我之前已经开始工作了,但是在通过Capastrano重新部署之后我无法实现它。
以下是事实:
RAILS_ENV=production bundle exec rails console
访问rails控制台并执行Active Record操作(例如
从数据库中检索数据。)app.get("/")
,它也会返回500错误(在首次显示运行加载的查询之后)
模特)。因为没有记录任何使用,我不知道该怎么做。我已经尝试在没有帮助的情况下在整个app目录上设置完全权限。多次重启服务器,什么都没有。数据库就在那里,rails可以清楚地与它通信。我不知道我做了什么让它第一次运行。我只是不知道为什么rails没有输出任何到日志中。
答案 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)
答案 3 :(得分:0)
您是否尝试在开发模式下运行以查看错误是否自行报告?