3

我在使用自定義域的Heroku中部署了一個Rails 4應用程序。我也有一個分期版本。該應用程序使用舒適的墨西哥沙發。(已解決)Rails 4自定義404會導致Heroku上的postgresql連接失敗

發生以下問題:應用程序將達到所有請求都返回500錯誤的狀態。日誌顯示:

[[email protected] expat]$ heroku logs 
ActiveRecord::ConnectionTimeoutError (could not obtain a database connection within 5.000 seconds (waited 5.000 seconds)): 

[[email protected] expat]$ heroku pg:info 
Connections: 5 

[[email protected] expat]$ heroku pg:ps 
pid | state | source | running_for | waiting | query 
-----+-------+--------+-------------+---------+------- 
(0 rows) 

[[email protected] expat]$ heroku pg:killall 
pg_terminate_backend 
---------------------- 
t 
t 
t 
t 
t 
(5 rows) 

隨後嘗試在一個500錯誤連接的結果和數據庫連接保持爲0

這個問題出現了,我創建使用本指南的自定義錯誤頁之後:http://wearestac.com/blog/dynamic-error-pages-in-rails

我可以通過創建一個使用該數據庫的404頁面,然後向服務器發出大約5或6個請求來爲不存在的頁面強制執行該問題。

編輯:

而使用靜態自定義404頁通過發出與JPEG擴展名不存在的文件5個或6請求我可以強制問題。日誌中出現以下內容:

Error during failsafe response: Missing template errors/not_found, application/not_found with {:locale=>[:en], :formats=>[:jpeg], :handlers=>[:erb, :builder, :raw, :ruby, :jbuilder, :coffee, :haml]}. Searched in: 
2014-02-17T17:26:14.595469+00:00 app[web.1]: * "/app/app/vi 
ews" 
2014-02-17T17:26:14.594508+00:00 app[web.1]: Completed 500 Internal Server Error in 7ms 

任何幫助隔離此問題將不勝感激。在此先感謝

+1

它試圖用404的JPEG圖像作出反應。所以它正在尋找not_found.jpg.erb模板。顯然你沒有那個。我不知道有關Heroku如何做的細節,但是你真的想阻止它在提供靜態內容(如圖像,CSS,js等)時碰到Rails堆棧。 – Grocery

+0

啊,你可能想要安裝:https: //github.com/heroku/rails_serve_static_assets – Grocery

+0

謝謝雜貨店。在一個respond_to塊中處理不同的格式的技巧。 – laertiades

回答

1

這裏是功能控制器代碼:

class ErrorsController < ApplicationController 
    def not_found 
    respond_to do |format| 
     format.any(:htm, :html, :xls, :xlsx) { render :status => 404, :layout => "error_frame", :formats => [:html] } 
     format.all { render nothing: true, status: 404 } 
    end 
    end 

    def unacceptable 
    respond_to do |format| 
     format.html { render :status => 422, :layout => "error_frame" } 
     format.all { render nothing: true, status: 422 } 
    end 
    end 

    def internal_error 
    respond_to do |format| 
     format.html { render :layout => false, :status => 500 } 
     format.all { render nothing: true, status: 500} 
    end 
    end 
end 
相關問題