2012-12-29 55 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是合適的,但不是必需的。