Ubuntu 9.10、Rails 2.3.4、ruby-ee 2010.01、PostgreSQL 8.4.2で、サイトを実行しているRailsアプリケーションとResqueワーカーを本番モードで実行しています。
ワーカーは常にエラーを発生させました:PGError:サーバーが予期せず接続を閉じました。
私の推測では、master resqueプロセスはdbへの接続を確立し(たとえば、authlogicはUser.acts_as_authenticを使用するときにそれを行います)、Railsアプリクラスをロードし、その接続はfork()されたプロセス(終了時に?)で破損するため、次にフォークされます子は一種の壊れたグローバルActiveRecord::Base.connectionを取得します
resqueworkerでフォーク/処理を模倣したこのサンプルコードで非常によく似た動作を再現できました。(AFAIK、libpqのユーザーは、とにかくフォークされたプロセスで接続を再作成することをお勧めします。そうしないと、安全ではありません)
しかし、奇妙なことに、直接pgsql接続の代わりにpgbouncerまたはpgpool-IIを使用すると、そのようなエラーは表示されません。
それで、問題は、プレーン接続で壊れて接続プールで動作している理由を見つけるために、どこでどのように掘り下げる必要があるかということです。または合理的な回避策?