1

Resque が Mysql2::Error: closed MySQL connection: SHOW FIELDS FROM `users` を返すで説明されているような問題があります。

私の場合、長時間実行されている Rake タスク (3 時間以上) 中に表示されます。基本的に、タスクは csvs からのデータのインポートに沿って実行され、突然 "closed MySQL connection" エラーを吐き始めます。これは、リモート MySql を使用したステージング環境でのみ発生し、ローカルで再現することはできません。

私の質問は、Rails アプリ (同じ接続プロパティを使用) が何日も問題なく実行できるのに、数時間後にデータ インポート タスクが爆発するのはなぜですか?

4

1 に答える 1

1

接続がタイムアウトしています。これは、mysql ドライバーを使用して長時間実行される rake タスクで常に発生します。database.yml で再接続フラグを設定してみてください

http://guides.rubyonrails.org/2_3_release_notes.html#reconnecting-mysql-connections

基本的に追加するだけです:

reconnect: true

私はいつもそれに出くわすので、これがこれ以上文書化されていないことに驚いています。それでもうまくいかない場合は、明示的に呼び出してみてください

ActiveRecord::ConnectionAdapters::ConnectionHandler#verify_active_connections!
于 2012-12-04T15:40:16.127 に答える