Страница ошибок Basic Rails 404 - PullRequest
       8

Страница ошибок Basic Rails 404

25 голосов
/ 19 сентября 2009

Я искал простой ответ на этот вопрос смехотворно долгое время, и кажется, что это должно быть настолько очевидно и просто, потому что ни у кого нет простого, идиотостойкого учебника.

В любом случае, все, что я хочу сделать, - это иметь одну статическую страницу 404.html, которая загружается при возникновении ЛЮБОЙ ошибки. В идеале это должно происходить только в производстве и постановке.

Я чувствую, что это должно быть легче всего сделать ... но я не могу понять это.

Любая помощь очень ценится.

Ответы [ 5 ]

19 голосов
/ 19 сентября 2009

в вашем 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 и вот, пожалуйста,

... или, может быть, я слишком осторожен с Exception, и вы должны вместо этого спастись от RuntimeError.

14 голосов
/ 19 сентября 2009

Я полагаю, что если вы работаете в производственном режиме, то 404.html в общедоступном каталоге обрабатывается всякий раз, когда нет маршрутов для URL.

7 голосов
/ 24 января 2012

Если вы работаете в производственном режиме, файлы 404.html, 500.html, 422.html в общедоступном каталоге будут обрабатываться при возникновении соответствующей ошибки, будут отображаться страницы сверху.

В рельсах 3.1

Мы можем использовать как ниже: Rails 3.1 автоматически сгенерирует ответ с правильным HTTP-кодом состояния (в большинстве случаев это 200 OK). Вы можете использовать параметр: status, чтобы изменить это:

визуализация: статус => 500

Отображать: статус =>: запрещено

Rails understands both numeric and symbolic status codes.

Подробнее см. На этой странице

Ура!

2 голосов
/ 19 сентября 2009

Вы не получите 404 при возникновении любой ошибки, потому что не все ошибки приводят к 404 с. Вот почему у вас есть 404, 422 и 500 страниц в вашем публичном каталоге. Я думаю, рельсы посчитали это наиболее распространенными ошибками. Как сказал Бен, 404 появится, когда не сможет что-то найти, 500, когда приложение выдаст ошибку. Между ними вы можете охватить множество ваших баз.

0 голосов
/ 19 мая 2015

Еще один способ сделать это - настроить 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.

...