ここでは自由回答形式の質問が少しあるので、最初に問題の概要を説明します。データ同期ジョブをキューからポップすることになっているResqueワーカーがいます。その理由は 2 つあります。Cron を使用する (そして Rails 環境の起動時間を何度も支払う) のが悪いことと、Github がうまく作成した代替キューです。彼らが Resque を発表したとき、彼らに対するかなり良いケースです。また、Redis の時系列機能は既にインフラストラクチャの大きな部分を占めており、TS データを RRDTool などにシャッフルしています...
ここに問題があります。典型的なジョブ間の間隔は 3 時間です (ただし、スタッフはいつでもジョブをスケジュールできます。そのため、キューが発生します)、PostgreSQL サーバーがなくなります。簡単に治すことができreconnect: true
、対応する環境下での設定により、これが期待どおりに機能することが保証されると期待していました...を使用するアプリケーションでは機能しない場所をいくつか 読みました. 当然のことながら、Resqueはワーカーを起動します...私が理解できない部分は、なぜ ActiveRecord の再接続がこれらの状況下で機能しないのかということです。reconnect: true
fork()
reconnect!
ActiveRecord でのMySQL アダプターとPostgreSQL アダプターの実装が異なることに気付きましたが、いずれにしても ActiveRecord のreconnect: true
構成は機能すると思います。
問題は十分に明確なようです。子プロセスが存在する場合、親によって作成されたファイルハンドルが閉じられます(したがって、データベースへの接続が切断されます)-ActiveRecordがそうしないような方法でファイルハンドルを閉じることは可能ですか接続が終了したことを認識しますか?
また、価値のあるものとして、Github で見つけたActiveRecord 対応の fork()もパスティとしてあります - テストしていませんが、動作すると思います (現在の Rails では試していません..)
私の質問はさらに、AR の自動再接続が機能しないのはなぜfork()
ですか? (そして最近では、この問題を抱えているのは私だけではありません。Resque で PGSQL を使用しているせいだと思います!)