Rails没有在救援区中捕获异常

时间:2012-12-29 04:37:30

标签: ruby-on-rails sphinx

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)):

有什么出路吗?

2 个答案:

答案 0 :(得分:2)

解决了它。

  

添加:populate =>搜索电话的真实选项。

     

通常情况下,Thinking Sphinx懒洋洋地加载搜索结果(允许)   狮身人面像范围等) - 但如果你想让救援生效,   然后你需要强制立即加载结果 - 因此   :填充选项。

请参阅上面发布的链接以供进一步阅读。

答案 1 :(得分:1)

鉴于ruby返回语义,您可以压缩代码:

def search_users(key)
  begin
    User.search(key,options)
  rescue
    puts "Hello World!!!"
    []
  end
end

拯救Exception是邪恶的。只需使用rescue即可抢救StandardError,它可以捕获您想要的大部分内容。否则,您还会捕获SyntaxErrorLoadErrorSystemExit以及其他您不想要的内容。在这种情况下,rescue Riddle::ConnectionError是合适的,但不是必需的。