【发布时间】:2025-12-26 12:40:07
【问题描述】:
在 localhost 上开发 rails 应用程序,每当出现错误时,您都可以在出现的 rails 页面上详细查看错误。但是,在 Heroku 上,出现错误时唯一出现的信息是“我们很抱歉,但出了点问题”。没有任何信息。我看过日志,这似乎没有帮助。有没有办法用详细的 Rails 错误页面替换通用 Heroku 错误页面?
【问题讨论】:
标签: ruby-on-rails heroku
在 localhost 上开发 rails 应用程序,每当出现错误时,您都可以在出现的 rails 页面上详细查看错误。但是,在 Heroku 上,出现错误时唯一出现的信息是“我们很抱歉,但出了点问题”。没有任何信息。我看过日志,这似乎没有帮助。有没有办法用详细的 Rails 错误页面替换通用 Heroku 错误页面?
【问题讨论】:
标签: ruby-on-rails heroku
这不是 Heroku 特有的问题,而是一个生产环境。在任何生产设置中,您都可以通过更改 config/environments/production.rb 中的这一行来显示完整错误
config.consider_all_requests_local = false
到
config.consider_all_requests_local = true
请注意,一个更好的替代方法是继续显示生产样式错误,而不是使用以下方式跟踪日志文件,以便用户看不到它:
heroku logs --app <yourappname> --tail
这将运行日志文件流,因此您不会错过任何内容,而不仅仅是最后 40 行。
如果您没有看到足够的信息,请在 config/environments/production 添加或更改 log_level 以进行调试
config.log_level = :info
或者您可以使用环境变量重置日志级别,因此您可以删除它并重新启动,而不是重新部署:
heroku config:add LOG_LEVEL=DEBUG --app <yourappname>
【讨论】:
这可以让你继续前进..
routes.rb
match "/404", :to => "exceptions#some_error"
match "/500", :to => "exceptions#some_error"
#add some more?
那么,
class ExceptionsController < ApplicationController
def some_error
@exception = env["action_dispatch.exception"]
@status_code = ActionDispatch::ExceptionWrapper.new(env, @exception).status_code
end
end
最后一个视图页面,显示某种异常,你将修复。
【讨论】:
在您的 rails 应用程序中,在 config/environments/production.rb 下,尝试更改
config.consider_all_requests_local = false
到
config.consider_all_requests_local = true
注意:当您想查看正常的 rails 错误消息时,您可能需要设置一个新环境并将其部署到 Heroku。可能是 staging 或 testing 之类的东西,因为您不希望用户在实时网站上看到此类错误。
【讨论】:
我感觉到你的痛苦。尝试运行heroku run rails console 以获得更清晰的错误。希望有帮助
【讨论】: