1

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

有什么出路吗?

4

2 回答 2

2

解决了。

将 :populate => true 选项添加到您的搜索调用中。

通常,Thinking Sphinx 会延迟加载搜索结果(允许使用 sphinx 范围等) - 但如果您希望救援生效,那么您需要强制立即加载结果 - 因此使用 :populate 选项。

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

于 2012-12-29T05:04:49.473 回答
1

给定 ruby​​ 返回语义,您可以压缩代码:

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

解救是邪恶的Exception。只需使用rescue, which就会拯救StandardError,它会捕获您想要的大部分内容。否则,您还会捕获SyntaxError,和其他您不想要的东西。在这种情况下,是合适的,但不是必需的。LoadErrorSystemExitrescue Riddle::ConnectionError

于 2012-12-29T05:31:51.053 回答