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)):
有什么出路吗?
答案 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
,它可以捕获您想要的大部分内容。否则,您还会捕获SyntaxError
,LoadError
,SystemExit
以及其他您不想要的内容。在这种情况下,rescue Riddle::ConnectionError
是合适的,但不是必需的。