サーバー上で継続的に実行する必要がある ruby スクリプトがあります。デーモン gem を使用してデーモン化しました。スクリプトでは、デーモン gem がスクリプトを開始するプロセスの開始と停止を処理するため、無限ループで実行しています。私のスクリプトでは、Sequel gem と tiny_tds を使用して DB インスタンスをセットアップすることから始めます。そのようです:
DB = Sequel.connect(adapter: 'tinytds', host: MSSQLHost, database: MSSQLDatabase, user: MSSQLUser, password: MSSQLPassword)
次に、loop do
それが私の無限ループです。DB.test_connection
その中で、次のようなクエリを使用して接続があるかどうかをテストし、DB に約 1 秒ごとにクエリを実行して、新しいコンテンツがあるかどうかを確認します。
DB['SELECT * FROM dbo.[MyTable]'].all do |row|
# MY logic here
# As part of my logic I test to see if I need to delete this row in the table and if so I use
DB.run('DELETE FROM dbo.[MyTable] WHERE some condition')
end
次に、ロジックの最後で、再びループする直前に、次のようにします。
sleep 1
DB.disconnect
これはすべて、テーブルのチェック、ロジックの実行、行の削除などのすべてで約1時間から1時間半の間うまく機能し、その後停止してこのエラーメッセージが表示されますTinyTds::Error: Adaptive Server connection timed out
私の質問は、なぜそれが起こっているのですか? コードを別の方法で再フォーマットする必要がありますか? DB.test_connection が宣伝されていることを実行しないのはなぜですか? ドキュメントには、接続プールで接続をチェックし、見つかった場合はそれを使用し、そうでない場合は新しい接続を作成すると書かれています。
どんな助けでも大歓迎です