私は、Rails 4.2プロジェクトでfork
を使用するRakeタスクを持っています。私はフォークと自動的に接続を閉じるにはActiveRecordを疑わまずActiveRecordがフォーク後にPostgres接続を切断する原因は何ですか?
PG::ConnectionBad: PQconsumeInput() server closed the connection unexpectedly
:私の問題は、私は再びデータベースにアクセスしようとしたとき、私は、次のPostgresのエラーを取得するフォーク処理後(すなわちProcess.wait
後)が終了したということですプロセスは終了する。しかし、ARのconnection_pool.rb
のコードを読んだ後、フォークのプロセスは、独自の接続を使用する必要があることを思わ:
接続が がその後フォーク持っている必要があり、先祖のプロセスに設立されました。接続を再利用することはできませんが、 をコピーして新しい接続を確立することができます。
(ActiveRecord::ConnectionAdapters::ConnectionHandler#pool_for_owner
から)
それにもかかわらず、フォークは無用接続をレンダリングします。
私はすべてのデータベースにアクセスしてからフォークプロセスを防ぐためにしようと、古い接続がフォーク後に次のコードを再利用することができないことが検証:この問題を解決する方法について
ActiveRecord::Base.default_connection_handler = nil
ActiveRecord::Base.connection_handler = nil
任意の提案を?
おそらくここの答えは役に立ちますか? http://stackoverflow.com/questions/13089875/fork-ruby-activerecord-and-file-descriptors-on-fork – margold