2009-09-19 19 views
25

Bu gülünç uzun bir süre için basit bir cevap arıyordum ve bu kadar açık ve basit olması gerektiği gibi görünüyor, çünkü hiç kimse kolay, aptal geçirmez öğretici vardır.Temel Raylar 404 Hata Sayfa

Her neyse, tek istediğim HERHANGİ bir hata atıldığında yüklenen tek bir 404.html statik sayfaya sahip olmak. İdeal olarak bu sadece üretim ve aşama aşamalarında gerçekleşmelidir.

Yapılması en kolay şey olmalı diye düşünüyorum ... ama anlayamıyorum.

Herhangi bir yardım çok takdir edilmektedir.

+0

İyi soru @chishomer Oku:

emin config/environments/development.rb değiştirmek yapmak, yerel Bunu sınamak için. Şunu kontrol et. http://stackoverflow.com/questions/1447627/basic-rails-404-error-page/8987083#answer-8987083 –

cevap

19

senin 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 

şimdi error_pages/404.html kurmak ve orada

gitmek ... ya da belki özel durum ile overcautious ve sen yerine RuntimeError dan kurtarmak gerekir.

+1

Cevabınız için teşekkürler, ayrıca bu konuda bulduğum bir nota yazımı olduğunu da eklemek istedim. http://www.perfectline.co.uk/blog/custom-dynamic-error-pages-in-ruby-on-rails – Schneems

+0

Rails 3 – hoyhoy

+2

üzerinde çalışmış gibi görünmüyor, belgelere rağmen ActionController :: Base.consider_all_requests_local' yerine 'Rails.application.config.consider_all_requests_local' kullanmalısınız. –

14

Üretim modunda çalıştırırsanız, ortak bir dizindeki 404.html'nin URL için herhangi bir yol olmadığında sunulduğuna inanıyorum.

2

Hata 404'le sonuçlanmadığı için herhangi bir hata atıldığında 404 elde edemezsiniz. Bu yüzden genel dizininizde 404, 422 ve 500 sayfa var. Sanırım raylar bunların en yaygın hatalar olduğunu düşünüyor. Ben'in dediği gibi, 404 bir şey bulamadığında ortaya çıkacak, uygulama bir hata attığında 500. İkisi arasında, üslerinin çoğunu kapatabilirsin. içinde

7

Üretim modunda çalıştırırsanız, ilgili dizinde 404.html, 500.html, 422.html dosyaları bulunur, ilgili hata oluştuğunda, yukarıdaki sayfalar gösterilir.

3.1 onu aşağıdaki gibi kullanabilirsiniz

raylar: otomatik olarak doğru HTTP durum kodu ile bir yanıt oluşturur Rails 3.1 (çoğu durumda, bu 200 sorun yok).

işlemek: Bunu değiştirmek için durum seçeneğini: Sen kullanabilirsiniz durumunu => 500

işlemek: status =>: yasak

Rails understands both numeric and symbolic status codes.

Fore more information see this page

Şerefe!

0

Bunu yapmanın bir başka yolu takip ile sizin config/application.rb yapılandırıyor:

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

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

Yani MyCustomException yükseltilir zaman, Raylar public/404.html render, düzenli :not_found gibi değerlendirir söyledi.

config.consider_all_requests_local = false 

, ben en iyi cevap verilmiş daha yaklaşık config.action_dispatch.rescue_responses.