如何确保Sphinx守护程序运行?

时间:2009-11-22 04:18:33

标签: ruby-on-rails ruby sphinx thinking-sphinx

我正在使用CentOS 5.3,Apache和Phusion Passenger(mod_rails)设置生产服务器。我有一个使用Sphinx搜索引擎和Thinking Sphinx gem的应用程序。

根据the Thinking Sphinx docs...

  

如果您确实想要搜索   索引数据,那么你需要   Sphinx的searchd守护进程正在运行。   这可以使用   以下任务:

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

确保在生产中发生这种情况的最佳方法是什么?我可以部署我的应用程序,然后手动运行rake thinking_sphinx:start,但我喜欢设置,这样如果我必须退回服务器,一切都会恢复。

我应该在初始化程序中调用该Rake任务吗?或rc.local中的某些内容?

3 个答案:

答案 0 :(得分:4)

rc.local是一个好的开始,但还不够。我会配合monit规则以确保它正在运行,更重要的是......

Sphinx需要一个完整的重新索引来制作所有最新和最好的。思考sphinx网站上有一些关于delta indexing的doco,但是如果你的索引很小,那么每小时重新索引会处理一些事情而你不需要增量索引。

我每小时运行一次来​​处理这个问题:

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

注意:对于部署,我将使用内置思维sphinx capistrano任务:

在您的Capfile中添加

require 'thinking_sphinx/deploy/capistrano'

我曾经在cap任务中链接重新索引但是停止因为它非常慢,当我进行架构更改时,我会记得运行它或者等待每小时cron作业来修复它。

答案 1 :(得分:1)

我之前没有使用Spinix,所以我希望有人可以给你一个更好的答案,但是你应该看一下monit。 Monit旨在让守护进程保持运行,就像你需要做的那样。

一个针对spinix monit的快速谷歌出现了这个链接:Capistrano recipes: sphinx:monit。那将是一个很好的起点。

答案 2 :(得分:0)

为了它的价值,我正在运行

thinking_sphinx:index

...在我的cron工作中,而不是“重建”任务。这不需要搜索进程离线,但索引在完成后仍会轮换,因此会选择新的更改。我认为只有在模型中实际更改索引结构时才需要“重建”任务,这对我来说很少发生。