我正在开发一个基于rails的应用程序。
在我的生产服务器上,每当出现错误时,我会看到以下屏幕。(文本:We're sorry, but something went wrong.)
如何在我的服务器上启用错误报告以查看实际错误? 我是否需要在Rails应用程序中进行任何配置更改或启用服务器上的错误报告。
注意: 我的服务器是Nginx。
如何在我的服务器上启用错误报告以查看实际错误? 我是否需要在Rails应用程序中进行任何配置更改或启用服务器上的错误报告。
注意: 我的服务器是Nginx。
如果您将以下内容添加到config/environments/production.rb
:
config.consider_all_requests_local = true
在生产环境中,你将看到与开发环境中相同的错误,但它还会禁用生产应用程序的缓存等。
我建议你查看/log/production.log
。在那里发布与通常显示在屏幕上相同的错误。
对于错误报告,有一个方便的宝石叫做exception_notification,每当应用程序发生异常时都会向您发送一封邮件。
如果您还想在页面上获得详细且完全可定制的错误报告,您需要进行一些编码。 这是我使用的代码(我会给您提供一个链接,但我找不到它了 :( )
定义一个 ErrorsController
如下:
class ErrorsController < ApplicationController
ERRORS = [
:internal_server_error,
:not_found,
:unprocessable_entity,
:unauthorized
].freeze
ERRORS.each do |e|
define_method e do
respond_to do |format|
format.html { render e, :status => e }
format.any { head e }
end
end
end
end
创建一个初始化程序来将控制器挂接到 Rails 异常处理链中:
require 'action_dispatch/middleware/show_exceptions'
module ActionDispatch
class ShowExceptions
private
def render_exception_with_template(env, exception)
env['exception'] = exception
body = ErrorsController.action(rescue_responses[exception.class.name]).call(env)
log_error(exception)
env.delete 'exception'
body
rescue Exception => e
log_error(e)
render_exception_without_template(env, exception)
end
alias_method_chain :render_exception, :template
end
end
为 ErrorsController::ERRORS
中的每个错误创建一个视图 (例如 app/views/errors/not_found.html.erb 等)。
我不认为这是最好的技术,但到目前为止它已经为我服务得很好了(你可以轻松地添加新错误页面,自定义每个错误的显示方式和内容)。