2012-12-29 120 views
1

User模型已使用ThinkingSphinx定义要搜索的索引。但是,当我停止我的searchd deamon时,我希望我的方法优雅地失败并且不会抛出错误。通常我通过使用一个救援块捕捉异常来做到这一点。但在这种情况下,它仍然会抛出错误,并且从不执​​行语句putsRails没有在救援块中发现异常

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

有什么办法呢?

+1

试过这个:https://groups.google.com/forum/?fromgroups=#!topic/thinking-sphinx/PGT22AqAvZo? – Zabba

+0

完美!解决了。非常感谢 :) – atmaish

回答

2

解决了它。

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

通常情况下,思考狮身人面像懒洋洋地加载搜索结果(允许 狮身人面像的范围和等) - 但如果你想抢救生效, 那么你就需要强制的结果,立即加载 - 因此 :填充选项。

查看上面张贴的链接以获得进一步阅读。

1

鉴于红宝石回报语义,你可以压缩你的代码:

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

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