Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 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.