Strona Błędu Basic Rails 404

Szukałem prostej odpowiedzi na to przez śmiesznie długi czas i wydaje się, że to musi być tak oczywiste i proste, ponieważ nikt nie ma łatwego, idiotycznego poradnika.

W każdym razie, wszystko, co chcę zrobić, to mieć pojedynczy 404.statyczna strona html, która ładuje się za każdym razem, gdy zostanie wyrzucony błąd. Idealnie powinno się to zdarzyć tylko w produkcji i inscenizacji.

Uważam, że to powinna być najłatwiejsza rzecz do zrobienia... ale nie mogę tego rozgryźć.

Każda pomoc jest dużo doceniam to.

Author: chrishomer, 2009-09-19

5 answers

W Twoim 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

Teraz skonfiguruj error_pages/404.html i gotowe

...a może jestem zbyt ostrożna z wyjątkiem i zamiast tego powinieneś uratować RuntimeError.

 19
Author: Leonid Shevtsov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-19 07:05:37

Wierzę, że jeśli uruchomisz tryb produkcyjny, to 404.html w katalogu publicznym jest obsługiwany, gdy nie ma tras dla adresu URL.

 14
Author: Sophie Alpert,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-19 03:47:28

Jeśli uruchomisz tryb produkcyjny, 404.html, 500.html, 422pliki html w katalogu publicznym są serwowane za każdym razem, gdy wystąpi odpowiedni błąd, wyświetlane będą strony z góry.

W rails 3.1

Możemy użyć jak poniżej: Rails 3.1 automatycznie wygeneruje odpowiedź z prawidłowym kodem statusu HTTP(w większości przypadków jest to 200 OK). Możesz użyć opcji :status, aby zmienić to:

Render: status = > 500

Render: status => : forbidden

Rails understands both numeric and symbolic status codes.

Więcej informacji znajdziesz na tej stronie

Zdrówko!
 7
Author: Manish Shrivastava,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-24 12:49:37

Nie dostaniesz 404 za każdym razem, gdy jakikolwiek błąd zostanie wyrzucony, ponieważ nie wszystkie błędy powodują 404s. dlatego masz 404, 422 i 500 stron w katalogu publicznym. Myślę, że rails uznał te błędy za najczęstsze. Jak Ben powiedział, 404 pojawi się, gdy nie może czegoś znaleźć, 500, gdy aplikacja wyrzuci błąd. Między tymi dwoma, możesz pokryć wiele swoich baz.

 2
Author: theIV,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-19 03:49:54

Innym sposobem na to jest skonfigurowanie config/application.rb za pomocą:

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

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

Tak, że gdy MyCustomException jest podniesione, Rails traktuje je jako zwykłe :not_found, renderując public/404.html.

Aby przetestować to lokalnie, upewnij się, że zmienisz config/environments/development.rb na:

config.consider_all_requests_local = false

Czytaj więcej o config.action_dispatch.rescue_responses.

 0
Author: Bruno Buccolo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-18 21:50:52