Railsの404や500エラーの表示をユーザor管理者画面で分ける
404や500エラーをユーザと管理者それぞれの画面で分けることにチャレンジ。
調べてみると、apprication.rbでrescue_action_in_publicをオーバーライドすることで出来そう。
また、管理者サイトのURIは必ず「/admin」から始まるので、REQUEST_URIをもとに以下のように判定。
apprication.rb def rescue_action_in_public(exception) case exception when ::ActionController::RoutingError, ::ActionController::UnknownAction, ::ActiveRecord::RecordNotFound if request.env["REQUEST_URI"] =~ /^\/admin.*/ render(:file => "#{RAILS_ROOT}/public/admin_404.html") else render(:file => "#{RAILS_ROOT}/public/404.html") end else if request.env["REQUEST_URI"] =~ /^\/admin.*/ render(:file => "#{RAILS_ROOT}/public/admin_500.html") else render(:file => "#{RAILS_ROOT}/public/500.html") end end end
ローカルで確認したところうまく行っていたので、意気揚々とテストサーバにデプロイ。
。。。なぜ見れない?
mongrel_clusterと連携しているApacheの設定だと思いこみ、小四時間も悪戦苦闘していると、
id:zenpouから「local_request? メソッドはどうなってます?」との指摘。
↓見てみると、
def local_request? ["<わが社のGWIPアドレス>"].include?(request.remote_ip) end
・・・・orz
GWから来た場合にローカルとみなしてマシタ。。。。