2010-11-30 76 views
2

我試圖在數據庫連接消失時在我的rails應用程序中顯示控制器特定的頁面。我通過在rescue_action方法中捕獲Mysql :: Error並渲染適當的頁面來實現此目的。當單獨的mysql服務停止時,我很快得到了Mysql :: Error異常,並且我可以毫不拖延地渲染頁面。Rails如何在後臺處理數據庫連接?

但是當服務器本身關閉時,rails需要3分鐘來拋出Mysql :: Error,並且在5-6之後請求整個網站變得沒有響應。

我試圖弄清楚,當MySQL服務器關閉時,rails框架中的哪個方法需要這麼長時間。這是一個connection.real_connect(在活動記錄mysql_adapter文件中)的方法,花了3分鐘返回一個異常。

所以我決定超時使用systemTimer gem這個方法。這個猴子補丁工作完美,當我啓動與數據庫連接的網站,並立即關閉數據庫服務器。

但是,當我用數據庫啓動網站,並訪問網站一段時間,然後關閉數據庫服務器,它根本無法工作。整個網站像以前一樣變得反應遲鈍。我想知道這兩種情況有什麼區別。

我想我需要更詳細地瞭解有關軌道如何處理數據庫連接。數據庫連接關閉時它如何起作用。這樣我就可以確定確切的地方,我可以放猴子補丁,並使其符合我的spefic要求。我沒有看到任何相關的文章解釋這一點。

任何幫助將是我

感謝非常有用的,

回答

4

我還沒有試過,但您可以添加connect_timeout作爲指定的選項之一(含港,主機等一起) database.yml文件中的MySQL連接。該值被傳遞給real_connect調用以建立與MySQL的連接。

此外,由於在進行初始連接並關閉數據庫後遇到延遲,因此可能需要使用read_timeout配置選項。

+0

我想,我需要把這個補丁https://github.com/rails/rails/commit/d3a802cee0f8cbe209af8886f8f8e8cab204d21a在我的database.yml文件中設置超時。我使用的是舊版本的rails(2.1) – anusuya 2010-11-30 19:05:25