2016-07-31 60 views
1

我已經檢查出Hanami,發現我的續集的連接使用下列錯誤垂死:分叉時,續集丟失SSL連接錯誤,爲什麼?

Sequel::DatabaseDisconnectError: PG::ConnectionBad: PQconsumeInput() SSL error: decryption failed or bad record mac: SELECT NULL

無論服務器(薄,彪馬,webrick)方式或環境。經過一番實驗,結果證明匪徒在Gemfile(hanami不重新載入代碼)。從獵槍文檔:

Each time a request is received, it forks, loads the application in the child process, processes the request, and exits the child process.

當生產與使用nginx的,分叉續集下降出於同樣的原因連接。

這可以用下面的代碼來改善,但是這將意味着人們必須重新對每個請求:

SequelDB.extension :connection_validator 
SequelDB.pool.connection_validation_timeout = -1 

如此看來,分叉後續集的連接池已損壞。

爲什麼續集這樣做?

回答

1

當進程分叉時,進程的每個副本共享用於與postgres對話的文件描述符。儘管有些庫檢測到分叉併爲你重新連接數據庫,但這不是續集特定的,甚至是Postgres特定的(在續集問題跟蹤器上看到這個discussion-簡短版本就是它不會在續集中發生)