私はfirebirdデータベースgemを使用して、ユーザー指定のデータベースに接続しています。ユーザーが正しいデータを提供している限り、正常に動作します。そうでなければ、gemは接続できません。また、gemが例外をスローするまでには非常に時間がかかります。私はタイムアウトを使用しようとしました:このようなタイムアウト:Rubyタイムアウトがタイムアウトしない
database = Fb:Database(connection_data)
Timeout::timeout(5) do
database.connect #that's the part that takes long to connect
end
しかし、タイムアウトしません。それは単に待機します(それは長い待ち時間、1分以上です)、そして宝石例外をスローします(タイムアウト例外ではありません)。それは、それが1-2分かかったことを除いて、コードが5秒(タイムアウトに従って)以下で実行されたようです。私は説明を探していましたが(ソースコードもチェックしています)、何も見つかりませんでした。私は本当にそれを修正したくないのです(なぜなら、それは遅れている仕事に移されるためです)。しかし、理由を知りたいのですが、どのようにタイムアウトを無視できますか?
また、以下のコードは正常に動作します。
Timeout::timeout(5) do
sleep(10)
end