簡體   English   中英

Rails沒有在救援區中捕獲異常

[英]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 ,它可以捕獲你想要它的大部分內容。 否則,您還會捕獲SyntaxErrorLoadErrorSystemExit和其他您不想要的東西。 在這種情況下, rescue Riddle::ConnectionError是合適的,但不是必需的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM