8

この投稿によると:

http://blog.plataformatec.com.br/2012/01/my-five-favorite-hidden-features-in-rails-3-2/

エラーを処理する最新の方法は次のようになります。

# application.rb:
config.exceptions_app = self.routes

#routes.rb
match "/404", to: "site#not_found"

ただし、彼は、railsエラーアプリが500エラー、422エラー(およびおそらくこれらの2つのページに集中した他のエラー)も処理するという事実に対処していません。

だから私はこのようなソリューションを一緒にハックしました:

# routes.rb
rack_error_handler = ActionDispatch::PublicExceptions.new('public/')
match "/422" => rack_error_handler
match "/500" => rack_error_handler

500ページを軽量に保つことができるのは良いことです。

他にもキャッチすべきエラーはありますか?私の理解では、500ページは2つのラックアプリを使用しますが、それでもメインのRailsアプリから十分に安全に分離されています。これは強いですか?

ありがとう!

4

2 に答える 2

1

アプリケーションコントローラーにレスキューfromを追加します

  if Rails.env.production?
    rescue_from ActiveRecord::RecordNotFound, :with => :render_not_found
    rescue_from ActionController::RoutingError, :with => :render_not_found
    rescue_from ActionController::UnknownController, :with => :render_not_found
    rescue_from ActionController::UnknownAction, :with => :render_not_found
    rescue_from ActionView::MissingTemplate, :with => :render_not_found
  end

  def render_not_found(exception)
    logger.info("render_not_found: #{exception.inspect}")
    redirect_to root_path, :notice => 'The page was not found.'
  end

次に、errors_controllerを追加して、ルートエラーをレスキューします。これをルートファイルの最後に追加します。

  match "*path", :to => "errors#routing_error"
于 2013-04-23T08:42:07.253 に答える
1

これを試して

アップデートconfig/application.rb

config.exceptions_app = self.routes

とあなたのルートファイル

match "/404", :to => "errors#not_found"
于 2013-10-01T09:01:57.093 に答える