我正在生产中运行的应用程序诊断500错误,这是非常困难的。 我以前有过这样的工作,但通过Capastrano重新部署后,我无法完成。
这里是事实:
服务器设置为Nginx + passenger,我正在使用Postgresql。
静态资产正常工作,因为我可以在浏览器中正常访问它们。
我可以通过RAILS_ENV=production bundle exec rails console访问RAILS_ENV=production bundle exec rails console并执行Active Record动作(如从数据库中检索数据)。
在控制台内,我可以运行app.get("/") ,它也会返回一个500错误(在首先显示运行加载模型的查询之后)。
production.log文件从不写入。 我已经为它设置了权限777。 我也设置日志级别:debugging没有任何显示。
Nginx日志(乘客也使用)没有显示错误,只是通知caching未命中。
因为没有使用logging,我不知道该怎么做。 我已经尝试在整个应用程序目录设置完整的权限,没有任何帮助。 重新启动服务器多次,什么都没有。 数据库在那里,轨道可以清楚地与它沟通。 我不知道我做了什么才能让它第一次运行。 我只是不知道为什么轨道不输出任何东西到日志。
Phusion Passenger + Heroku + Cloudfront:CORSconfiguration
Nginx未知指令passenger_root
百胜在Linux不工作
RVM,Ruby 1.9.2,Rails 3,Passenger 3.0.2(Bundler :: GemNotFound)
使用Passenger for Nginx部署多个Ruby应用程序(Rails和Sinatra)?
Nginx limit_req限制的问题 – 文档说明?
旅客服务器定期关机的主要原因是什么?
Faye-rails,ngnix,乘客从faye响应迟缓
使用Nginx和Phusion Passenger自动部署rails Gitlab项目到子域
Rails JavaScript视图在生产中不起作用
好的,我明白了这一点。 该应用程序在开发模式下运行良好,所以我知道生产特定的东西是搞砸了。 我进入了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
然后重新启动乘客后,铁轨显示我错误w / stacktrace。 原来我忘了预先编译资产管道!
事情要检查
1)你确定你在生产环境中运行吗? 检查是否有任何条目在development.log文件中
2)设置您的应用程序发送电子邮件时,500堆栈跟踪发生错误。 我使用Exception Notifier gem,但是有很多其他解决方案。
3)在控制台检查您的应用程序时,确定您是在生产模式下启动控制台? 应用程序可能根本没有启动,只是忘了设置生产参数,从而认为应用程序运行良好。
4)你是否得到一个Nginx 500错误或Rails 500错误? 如果是Nginx,那么很可能是你的应用程序根本就没有启动,而且不太可能在你的日志文件中出现任何rails错误。 这些资产是静态文件,导航到他们证明只是你的存在。
5)你确定你正在检查服务器上的正确的文件夹? 听起来很愚蠢,但是capistrano可能会将应用程序部署到与ninx正在寻找您的应用程序的文件夹不同的文件夹,所以请仔细检查capistrano正在部署到的文件夹以及Nginx正在查找的文件夹。
只是一个建议,我会用独角兽而不是乘客。 这对Nginx来说太棒了。
我的问题是乘客的日志文件( error.log )没有任何内容。 那么这是一个轮转日志问题。 跑
passenger-config reopen-logs
解决了我的问题。 更多 。
您是否尝试过在开发模式下运行以查看错误是否会自行报告?