6

我正在使用 Rails 应用程序。每当出现错误时,我都可以在生产服务器中看到以下屏幕。(文字:我们很抱歉,但出了点问题。)

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

在此处输入图像描述

注意:我的服务器是 Ngnix。

4

2 回答 2

14

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

config.consider_all_requests_local = true

您将看到与开发中相同的错误,但它也会禁用生产应用程序的缓存等。

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

于 2012-07-25T12:25:17.693 回答
1

对于错误报告,有一个名为exception_notification的便捷 gem ,每次应用程序中发生异常时都会向您发送一封邮件。

如果您还想在页面上获得详细且完全可定制的错误报告,则必须进行一些编码。这是我使用的(我会给你一个链接,指向我从哪里获取它,但我再也找不到它了:()

  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. 创建一个初始化器将控制器挂接到 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
    
  3. 为每个错误创建一个视图ErrorsController::ERRORS(即 app/views/errors/not_found.html.erb 等)。

我不认为这是最好的技术,但到目前为止它对我很有帮助(您可以轻松地为新错误添加页面,自定义您希望分别为每个错误显示的方式和内容)。

于 2012-07-25T12:59:13.483 回答