0

まれに XML を提供している Rails アプリがあります。これは mongrel と mysql で実行されています。アプリを数時間以上実行しないと、アプリが停止し、Errno::EPIPE エラーが発生し始めることがわかりました。非アクティブまたはそのようなもののためにmysql接続がタイムアウトしたようです。

「mongrel_rails restart -P /path/to/the/mongrel.pid」で再起動できます...しかし、それは実際の解決策ではありません。私の共同作業者は、彼が自分の側で作業しているときにアプリがそこにあることを期待しています (そして私はほとんどの場合不在です)。

私の質問は:

  • そもそもこの問題が発生しないようにするにはどうすればよいですか? (例えば、タイムアウトしないでください!!)。
  • それができない場合、Db 接続を自動的に作り直すためにどこかに挿入できるコードはありますか?
4

2 に答える 2

1

解決策は次のとおりです。

https://boxpanel.blueboxgrp.com/public/the_vault/index.php/Mongrel_/_MySQL_Timeout

上記のソリューションのタイムアウトは、私には少し高いように思われます。接続が使用できるメモリの量のために、DBタイムアウトを低くしすぎないようにする必要があります。接続が孤立している場合は、合理的にタイムアウトする必要があります(1週間以内など)。

于 2008-09-25T06:10:23.417 に答える
0

他の場所では、次の提案も得ました。

  1. config.active_record.verification_timeoutを mysql 接続タイムアウト設定よりも低い値に設定 してみてください。

  2. この問題を回避するための gem があります: mysql_retry_lost_connection

     http://rubyforge.org/projects/zventstools/
     "Reconnect to the MySQL server when you hit a lost connection error".
    
于 2008-09-27T16:33:08.960 に答える