Railsアプリで作業しています。エラーが発生するたびに、本番サーバーで以下の画面を確認できます。(テキスト:申し訳ありませんが、問題が発生しました。)
サーバーでエラーレポートを有効にして実際のエラーを確認するにはどうすればよいですか?Railsアプリで構成を変更したり、サーバーでエラー報告を有効にしたりする必要がありますか?
注:私のサーバーはNgnixです。
Railsアプリで作業しています。エラーが発生するたびに、本番サーバーで以下の画面を確認できます。(テキスト:申し訳ありませんが、問題が発生しました。)
サーバーでエラーレポートを有効にして実際のエラーを確認するにはどうすればよいですか?Railsアプリで構成を変更したり、サーバーでエラー報告を有効にしたりする必要がありますか?
注:私のサーバーはNgnixです。
これをあなたのconfig/environments/production.rb
:に追加すると
config.consider_all_requests_local = true
開発時と同じエラーが表示されますが、本番アプリなどのキャッシュも無効になります。
むしろ調べてみることをお勧めします/log/production.log
。通常画面に表示されるのと同じエラーがそこに投稿されます。
エラー報告には、アプリケーションで例外が発生するたびにメールを送信する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 など)。
これが最善の手法であるとは言いませんが、これまでのところうまく機能しています (新しいエラー用のページを簡単に追加したり、各エラーの表示方法や表示内容を個別にカスタマイズしたりできます)。