【问题标题】:How can I make sure the Sphinx daemon runs?如何确保 Sphinx 守护程序运行?
【发布时间】:2009-11-22 04:18:33
【问题描述】:

我正在使用 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 中的内容?

【问题讨论】:

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


    【解决方案1】:

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

    Sphinx 需要一个完整的重新索引来提供所有最新和最好的。在thinking sphinx 网站上有一些关于delta indexing 的文档,但是如果您的索引很小,则每小时重新索引一次就可以解决问题,并且您不需要增量索引。

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

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

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

    在你的 Capfile 中添加

    require 'thinking_sphinx/deploy/capistrano'
    

    我曾经在 cap 任务中链接重新索引,但由于它真的很慢而停止了,当我进行架构更改时,我会记得运行它或等待每小时的 cron 作业来修复它。

    【讨论】:

    • 如果用户在重新索引运行时进行搜索,他们不会收到错误吗?
    • yerp,当你重建时它会使搜索死掉,我建议你添加一些重试逻辑来补偿(重试最多 20 秒,或者显示一个自定义页面,说搜索将很快可用) . (pat 将其添加到 ts 可能是个好主意)
    • 如果你必须重启服务器,你还需要一种启动守护进程的方法。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      为了它的价值,我正在跑步

      thinking_sphinx:index
      

      ...在我的 cron 工作中,而不是“重建”任务。这不需要 searchd 进程离线,但索引在完成后仍会旋转,因此会获取新的更改。我认为“重建”任务仅在您实际更改模型中的索引结构时才是必要的,这对我来说很少发生。

      【讨论】: