2009-11-22 45 views
2

我正在使用CentOS 5.3,Apache和Phusion Passenger(mod_rails)設置生產服務器。我有一個使用Sphinx搜索引擎和思維獅身人面像寶石的應用程序。我如何確保獅身人面像守護進程運行?

根據the Thinking Sphinx docs...

如果你真的想要搜索對 索引數據,那麼你需要 獅身人面像的searchd的守護程序正在運行。

rake thinking_sphinx:start 
rake ts:start 
rake thinking_sphinx:stop 
rake ts:stop 

什麼是保證這個發生在生產的最佳方式: 這可以通過使用 以下任務進行控制?我可以部署我的應用程序,然後手動運行rake thinking_sphinx:start,但我喜歡設置一些東西,這樣如果我不得不彈回服務器,一切都會恢復。

我應該在初始化程序中調用Rake任務嗎?或者在rc.local

回答

4

rc.local是一個好的開始,但它還不夠。我會配對是一個監控規則,以確保它正在運行,更重要的是...

獅身人面像需要一個完全重建索​​引,使所有最新的和最大的可用。關於delta indexing的思考獅身人面像網站上有一些doco,但是如果您的索引很小,每小時重新索引將會照顧到事情,而且您不需要delta索引。

我跑這每小時要照顧這:

0 * * * * cd /var/rails/my_site/current/ && RAILS_ENV=production /usr/bin/rake ts:rebuild 

注:部署,我會使用內置的思維獅身人面像Capistrano的任務:

在你Capfile添加

require 'thinking_sphinx/deploy/capistrano' 

我曾經在cap任務中鏈接重新索引,但是因爲速度非常慢,所以當我進行模式更改時,我會記得運行它或等待小時的cron作業修復它。

+0

如果用戶在重新編制索引時正在執行搜索,是不是會出現錯誤? – Ethan 2009-11-22 22:33:03

+0

yerp,當重建時它會讓搜索死掉,我建議你添加一些重試邏輯來補償(重試長達20秒,或者顯示一個自定義頁面,表明搜索將很快可用)。 (可能是pat的一個好主意,將其添加到ts) – 2009-11-22 22:47:21

+0

如果必須重新啓動服務器,則還需要一種啓動守護進程的方法。 – holaSenor 2013-02-15 13:55:25

1

我還沒有用Spinix做過這個,所以我希望有人能給你更好的答案,但你應該看看monit。 Monit旨在保持守護進程運行,就像你需要做的一樣。

一個快速的Google for spinix monit打開了這個鏈接:Capistrano recipes: sphinx:monit。那將是一個開始的好地方。

0

對於它的價值,我跑

thinking_sphinx:index 

...在我的cron作業,而不是「重建」的任務。這不需要searchd進程處於脫機狀態,但索引在完成後仍會進行旋轉,因此會收到新的更改。我認爲只有當你改變模型中的索引結構時才需要「重建」任務,這對我來說很少發生。