web-dev-qa-db-ja.com

基本Rails 404エラーページ

私はこれに対する簡単な答えを途方もなく長い間探していましたが、誰も簡単でばかげた証拠のチュートリアルを持っていないので、これは非常に明白で単純でなければならないようです。

とにかく、私がやりたいのは、エラーがスローされるたびに読み込まれる単一の404.html静的ページを用意することです。理想的には、これは本番環境とステージングでのみ発生するはずです。

これが一番簡単なことだと思いますが…でもわかりません。

どんな助けでも大歓迎です。

25
chrishomer

ApplicationController

unless  ActionController::Base.consider_all_requests_local
  rescue_from Exception, :with => :render_404
end

private

  def render_404
    render :template => 'error_pages/404', :layout => false, :status => :not_found
  end

今セットアップerror_pages/404.htmlそしてそこに行きます

...または、例外に注意しすぎている可能性があります。代わりに、RuntimeErrorから救出する必要があります。

20
Leonid Shevtsov

本番モードで実行すると、URLのルートがない場合は常に、パブリックディレクトリの404.htmlが提供されると思います。

14
Sophie Alpert

本番モードで実行している場合、パブリックディレクトリ内の404.html、500.html、422.htmlファイルは、それぞれのエラーが発生するたびに提供され、上からのページが表示されます。

In Rails 3.1

以下のように使用できます:Rails 3.1は、正しいHTTPステータスコードで応答を自動的に生成します(ほとんどの場合、これは200 OKです)。: statusオプションを使用してこれを変更できます。

レンダリング:ステータス=> 500

レンダリング:ステータス=>:禁止

Rails understands both numeric and symbolic status codes.

詳細についてはこのページを参照してください

乾杯!

7

すべてのエラーが404になるわけではないため、エラーがスローされても404は取得されません。これが、パブリックディレクトリに404、422、および500ページがある理由です。 Railsは、これらが最も一般的なエラーであると考えています。ベンが言ったように、何かが見つからない場合は404が、アプリケーションがエラーをスローした場合は500が表示されます。2つの間で、あなたはあなたの基地の多くをカバーすることができます。

2
theIV

これを行う別の方法は、次のようにconfig/application.rbを構成することです。

module YourApp
  class Application < Rails::Application
    # ...

    config.action_dispatch.rescue_responses.merge!(
      'MyCustomException' => :not_found
    )
  end
end

そのため、MyCustomExceptionが発生するたびに、Railsはそれを通常の:not_foundとして扱い、public/404.htmlをレンダリングします。

これをローカルでテストするには、config/environments/development.rbを次のように変更してください。

config.consider_all_requests_local = false

続きを読む config.action_dispatch.rescue_responses

0
Bruno Buccolo

これが私のやり方です。私のapplication_controller.rb

def render_404
  render file: 'public/404.html', layout: false, status: :not_found
end

次に、404をレンダリングしたいコントローラーで、次のようにします。

@appointment = Appointment.find_by(id: params[:appointment_id]) || render_404
0
Jason Swett