我正在使用rails应用程序。 每当出现错误时,我都可以在生产服务器中看到下面的屏幕。 (文字:我们很抱歉,但出了点问题。)
如何在我的服务器中启用错误报告以查看实际错误? 我是否必须在Rails应用程序中进行任何配置更改或在我的服务器中启用错误报告。
注意:我的服务器是Ngnix。
答案 0 :(得分:13)
如果您将其添加到config/environments/production.rb
:
config.consider_all_requests_local = true
您将看到与开发中相同的错误,但它也会禁用生产应用程序等的缓存。
我建议你调查一下/log/production.log
。屏幕上通常会显示相同的错误。
答案 1 :(得分:1)
对于错误报告,有一个名为exception_notification的方便的gem,每次在您的应用程序中发生异常时都会向您发送邮件。
如果您还希望在页面上获得详细且完全可自定义的错误报告,则必须进行一些编码。 这是我使用的(我会给你一个链接到我从哪里拿到这个,但我找不到它了:()
像这样定义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
端
创建一个初始化程序,将控制器挂钩到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等)。
我并不认为这是最好的技术,但它到目前为止一直很好用(你可以轻松地为新错误添加页面,自定义每个错误的显示方式和内容)。