我一直在尋找一個簡單的答案,這個很可笑的時間很長,看起來像這樣必須是如此明顯而簡單,因爲沒有人有一個簡單,傻瓜證明教程。基本導軌404錯誤頁面
無論如何,我想要做的只是一個單一的404.html靜態頁面,加載任何錯誤時拋出。理想情況下,這應該只在生產和舞臺上發生。
我覺得這應該是最簡單的事情......但我無法弄清楚。
任何幫助,非常感謝。
我一直在尋找一個簡單的答案,這個很可笑的時間很長,看起來像這樣必須是如此明顯而簡單,因爲沒有人有一個簡單,傻瓜證明教程。基本導軌404錯誤頁面
無論如何,我想要做的只是一個單一的404.html靜態頁面,加載任何錯誤時拋出。理想情況下,這應該只在生產和舞臺上發生。
我覺得這應該是最簡單的事情......但我無法弄清楚。
任何幫助,非常感謝。
在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
和你去那裏
...也許我縮手縮腳與異常,你應該從RuntimeError搶救代替。
我相信,如果您在生產模式下運行,那麼每當沒有URL的路由時,公共目錄中的404.html將被獲取。
每當發生任何錯誤時都不會得到404,因爲並非所有錯誤都會導致404錯誤。這就是爲什麼你的公共目錄中有404,422和500頁。我想鐵軌已經認爲這是最常見的錯誤。像Ben說的那樣,404會在找不到東西時出現,500當應用程序拋出錯誤時。在這兩者之間,你可以覆蓋很多你的基地。
如果您在生產模式下運行,每當發生相應錯誤時,公共目錄中的404.html,500.html,422.html文件都會得到處理,則會顯示上面的頁面。
在Rails 3.1
我們可以使用如下: 的Rails 3.1將自動生成正確的HTTP狀態碼的響應(在大多數情況下,這是200 OK)。您可以使用:狀態選項更改此:
渲染:狀態=> 500
渲染:狀態=>:禁止
Rails understands both numeric and symbolic status codes.
Fore more information see this page
乾杯!
這樣做的另一種方式是用下面的配置您的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
問得好@chishomer,我給出最好的答案。檢查一下。 http://stackoverflow.com/questions/1447627/basic-rails-404-error-page/8987083#answer-8987083 –