我想超時從Ruby核心使用超時ActiveRecord查詢,但ActiveRecord似乎趕上Timeout::Error
幷包裝它在ActiveRecord::StatementInvalid
異常。超時ActiveRecord查詢
> Timeout::timeout(3) { sleep 4000 }
Timeout::Error: execution expired
...
> Timeout::timeout(3) { ActiveRecord::Base.connection.execute "select pg_sleep(4)"}
(3001.5ms) select pg_sleep(4)
: execution expired: select pg_sleep(4)
ActiveRecord::StatementInvalid: : execution expired: select pg_sleep(4)
...
這是不幸的,因爲我也想趕上真正的SQL錯誤產生ActiveRecord::StatementInvalid
例外,區別對待。 有沒有辦法區分兩者? (比「執行過期」的異常消息匹配更乾淨)。
您必須實際查看錯誤消息。 – muichkine