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から来た場合にローカルとみなしてマシタ。。。。