2012-07-25 26 views
4

我正在使用Rails应用程序。 只要出现错误,我就可以在我的生产服务器中看到下面的屏幕。 (文字:很抱歉,但出错了)如何在生产模式下运行rails应用程序时启用错误报告?

如何在我的服务器中启用错误报告以查看实际错误? 我是否必须在Rails应用程序中进行任何配置更改或在我的服务器中启用错误报告。

enter image description here

注:我的服务器是Ngnix。

回答

12

如果您添加到您的config/environments/production.rb

config.consider_all_requests_local = true 

你会看到同样的错误,在开发中,但它也将禁用缓存为生产应用等

我宁愿建议你看看/log/production.log。通常在屏幕上显示相同的错误。

1

对于错误报告,有一个称为exception_notification的方便宝石,它在您的应用程序中每次发生异常时都会向您发送邮件。

如果您还想在页面上获得详细且完全可自定义的错误报告,则必须进行一点编码。 下面是我用什么(我愿意给你一个链接,我已经采取了这种来自哪里,但我不能再找到它:()

  1. 定义一个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 
    

  2. 创建初始化到控制器挂钩到滑轨异常处理链:

    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 
    
  3. ErrorsController::ERRORS中的每个错误创建视图(即, app/views/errors/not_found.html.erb等)。

我不主张这是最好的技术,但它使我受益匪浅到目前为止(你可以轻松地添加页新的错误,定制想要的方式和内容单独显示每个错误)。

相关问题