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 に答える