【问题标题】:How do you diagnose a 500 error on Heroku when there is no error message in the logs?当日志中没有错误消息时,如何诊断 Heroku 上的 500 错误?
【发布时间】:2013-10-16 18:18:18
【问题描述】:

我在 Heroku 上有一个 Rails 应用程序,它以随机间隔提供 500 个错误。网页将以纯文本形式显示“内部服务器错误”,而不是通常的“我们很抱歉。出了点问题”。页。当我刷新页面时,它工作正常。

日志不会显示错误消息,只是

» 14:20:34.107 2013-10-11 12:20:33.763690+00:00 heroku router - - at=info method=HEAD path=/ host=www.mydomain.com fwd="184.73.237.85/ec2-184-73-237-85.compute-1.amazonaws.com" dyno=web.1 connect=1ms service=63ms status=200 bytes=0
» 14:21:03.957 2013-10-11 12:21:03.561867+00:00 heroku router - - at=info method=GET path=/ host=www.mydomain.com fwd="50.112.95.211/ec2-50-112-95-211.us-west-2.compute.amazonaws.com" dyno=web.1 connect=0ms service=1ms status=500 bytes=21

支持人员告诉我查看 New Relic 中的请求队列,但 New Relic 仅显示一个大红色标记,表示服务器已关闭(即使网站在刷新时工作正常)。

没有错误消息,我不知道如何诊断这个问题。

【问题讨论】:

  • 你可以试试 Fiddler...
  • 您是否尝试重新启动应用程序?有时错误是在启动期间。
  • @JCG 你能解释一下在这种情况下如何使用 fiddler 吗?
  • 不,我实际上不能......但如果它是一个网络应用程序,并且它返回 500,你应该能够在 fiddler 中看到标题。
  • 只是一种可能性,向 OP 展示可以帮助他/她的工具并不是责任。

标签: ruby-on-rails heroku internal-server-error


【解决方案1】:

尝试添加 rails_12factor gem 以获得更可靠的错误日志(仅当您使用 Heroku 时)。

确保您在 Heroku 上使用heroku run rake db:migraterake db:migrate 您的数据库

【讨论】:

  • 我收到 500 错误,就像原始海报一样,没有提供更多信息,即使使用 LogEntries。运行“heroku run rake db:migrate”后,应用程序运行正常。
  • 谢谢,rails_12factor 帮助我很好地记录了 Heroku!
  • 现在是 2016 年,db:migrate 仍然对我有用 :) 非常感谢伙计 :) 如果用户忘记了这些 rake 命令,heroku 应该会返回一些错误。
  • 这正是我所需要的。
  • 只想 +1 这个人。我在索引页上使用了<%console%>。感谢上帝赐予这颗宝石。
【解决方案2】:

在 Heroku 中,我使用 LogEntries 诊断错误——它比 Heroku 日志更容易诊断错误。

我要做的是加载应用程序,然后在 LogEntries 面板中,转到“Live (Beta)”。这显示了出现的任何错误,并且通常非常容易解释

只是一些可能有帮助的东西

【讨论】:

  • 谢谢,里奇。我在问题中粘贴的日志来自 LogEntries。它只是说有一个 500,没有错误消息或其他任何内容。
  • 你在使用 Webrick 吗?
  • 嗯,好吧——为了让它工作,你有没有机会在你的 GemFile 中注释掉薄薄的宝石?这将启动 webrick,并允许您查看遇到的错误 :) 如果您需要更多帮助,我们可以进入 Chat?
  • Thin 隐藏错误信息?我不知道。我已经按照您的建议设置了 Webrick,并且 500 错误似乎已经停止。我被告知不要在生产中使用 Webrick,所以答案可能是使用 Unicorn。
  • 恭喜!!我希望它对您有用,如果您有任何其他问题,请发表评论!
【解决方案3】:

将我的 Django 应用程序部署到 Heroku 时对我有用的解决方案是进入 production.py 文件并将代码 DEBUG = FALSE 更改为 DEBUG = TRUE。这样,您应该能够看到 Django 显示的错误。 请注意,一旦您发现错误并进行了更正,必须将此设置改回FALSE

如果更改为 TRUE 显示应用程序可以工作但错误不可见,请检查您的 forms.py 文件并确保您的模型没有任何不一致。在我之前的案例中,forms.py 文件是罪魁祸首。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-09
    • 1970-01-01
    • 2012-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多