我正在使用火鳥數據庫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
但它不超時。它只是等待(這是一個漫長的等待,超過一分鐘),並拋出寶石異常(它不是超時異常)。看起來代碼執行時間低於5秒(根據Timeout),除了它花了1-2分鐘。我一直在尋找一個解釋(檢查源代碼),但沒有找到任何解釋。我真的不想修復它(因爲無論如何它都會被延遲工作),但我想知道爲什麼,以及如何忽略Timeout。
此外,下面的代碼工作正常。
Timeout::timeout(5) do
sleep(10)
end