[英]Rails not catching exception in rescue block
User
模型定義了使用ThinkingSphinx
搜索的索引。 然而,當我停止我的searchd
守護程序,我想我的方法失敗正常而不是拋出一個錯誤。 通常我通過使用救援塊捕獲異常來做到這一點。 但在這種情況下,它仍會拋出錯誤,並且從不執行puts
語句。
def search_users(key)
begin
search_results = User.search(key,options)
rescue Exception
puts "Hello World!!!"
search_results = []
end
return search_results
end
以下是我得到的錯誤:
Riddle::ConnectionError (Connection to 127.0.0.1 on 3201 failed. Connection refused - connect(2)):
有什么出路嗎?
解決了它。
在搜索調用中添加:populate => true選項。
通常情況下,Thinking Sphinx懶洋洋地加載搜索結果(允許sphinx范圍等) - 但是如果你想讓救援生效,那么你需要強制立即加載結果 - 因此:populate選項。
請參閱上面發布的鏈接以進一步閱讀。
給定ruby返回語義,您可以壓縮代碼:
def search_users(key)
begin
User.search(key,options)
rescue
puts "Hello World!!!"
[]
end
end
拯救Exception
是邪惡的。 只需使用rescue
,它可以拯救StandardError
,它可以捕獲你想要它的大部分內容。 否則,您還會捕獲SyntaxError
, LoadError
, SystemExit
和其他您不想要的東西。 在這種情況下, rescue Riddle::ConnectionError
是合適的,但不是必需的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.