Страница ошибки Basic Rails 404
Я искал простой ответ на этот вопрос до смешного долгого времени, и кажется, что это должно быть настолько очевидным и простым, потому что никто не имеет легкого, идиотского учебника.
В любом случае, все, что я хочу сделать, это создать одну статическую страницу 404.html, которая загружается всякий раз, когда возникает ЛЮБАЯ ошибка. В идеале это должно происходить только в производстве и постановке.
Я чувствую, что это должно быть самым легким делом... но я не могу понять это.
Любая помощь очень ценится.
Ответы
Ответ 1
в 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.
Ответ 2
Я считаю, что если вы запустите в режиме производства, тогда 404.html в общедоступном каталоге будет обслуживаться всякий раз, когда нет маршрутов для URL-адреса.
Ответ 3
Если вы запускаете в рабочем режиме, файлы 404.html, 500.html, 422.html в общедоступном каталоге будут отображаться всякий раз, когда возникает соответствующая ошибка, будут показаны страницы сверху.
В рельсах 3.1
Мы можем использовать, как показано ниже:
Rails 3.1 автоматически генерирует ответ с правильным кодом состояния HTTP (в большинстве случаев это 200 OK). Вы можете использовать параметр: status, чтобы изменить это:
render: status = > 500
render: status = > : запрещено
Rails understands both numeric and symbolic status codes.
Дополнительные сведения см. на этой странице
Ура!
Ответ 4
Вы не получите 404 всякий раз, когда возникает какая-либо ошибка, потому что не все ошибки приводят к 404s. Вот почему у вас 404, 422 и 500 страниц в вашем общедоступном каталоге. Я полагаю, что рельсы считают это наиболее распространенными ошибками. Как сказал Бен, 404 придет, когда он не сможет найти что-то, 500, когда приложение выдает ошибку. Между ними вы можете покрыть много своих баз.
Ответ 5
Другой способ сделать это - настроить 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
.