Mongrel/Mysql Errno::EPIPE 例外の防止
-
02-07-2019 - |
質問
私は Rails アプリを持っており、不定期に XML を提供しています。これはmongrelとmysqlで実行されています。アプリを数時間以上実行しないと、アプリが停止し、Errno::EPIPE エラーがスローされ始めることがわかりました。mysql 接続が非アクティブまたはそのような理由でタイムアウトになっているようです。
「mongrel_rails restart -P /path/to/the/mongrel.pid」で再起動できます...しかし、それは本当の解決策ではありません。私の共同作業者は、自分の仕事をしているときにアプリがそこにあることを期待しています (おそらく私はそばにいません)。
私の質問は次のとおりです。
- そもそもこの問題の発生を防ぐにはどうすればよいでしょうか?(例えば。タイムアウトしないでください!!)。
- それに失敗した場合、データベース接続を自動的に再作成するためにどこかにコードを挿入できるものはありますか?
解決
解決策は次のとおりです。
https://boxpanel.blueboxgrp.com/public/the_vault/index.php/Mongrel_/_MySQL_Timeout
上記の解決策のタイムアウトは少し高いように思えます。接続で使用できるメモリ量を考慮すると、DB タイムアウトが低すぎることは望ましくありません。接続が孤立している場合は、合理的に (1 週間以内などに) タイムアウトする必要があります。
他のヒント
他の場所では、次のような提案も受けました。
設定してみるconfig.active_record.verification_timeout MySQL接続タイムアウト設定よりも低いものに。
この問題を回避するための gem があります。 mysql_retry_lost_connection
http://rubyforge.org/projects/zventstools/ "Reconnect to the MySQL server when you hit a lost connection error".
所属していません StackOverflow