思考Sphinx无法访问本地索引

时间:2014-08-28 08:42:02

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

带有thinking_sphinx 3.1.1的rails 3.2.18正在从开发模式传递到生产模式。 在此过程中,同时执行以下任何工作:

bundle exec rake ts:rebuild
bundle exec rake ts:index
bundle exec rake ts:stop
bundle exec rake ts:start

搜索最终以

结束
ActionView::Template::Error (unknown local index [...]

我最初意识到我在应用程序上运行了2个搜索pid,因为开发有一个shared目录,其中放置了sphinx标记和tmp / pid文件。这是继续进行的,因此创建了两个pid:一个来自共享文件夹,另一个来自应用程序发布的共享文件夹。杜!

仍然是ps aux | grep searchd正在返回两个进程 /fna/shared/config/development.sphinx.conf pids 匹配共享文件夹中的那些,并且他们调用开发 另一个仍在开发中的应用程序(!)也有两个进程

1)有两个过程是正常的吗? 2)如何让pids为production.shpinx.conf启动(并摆脱偶然的污染)?

我意识到这也可能受到capistrano部署的影响,并欢迎提出正确完成问题的建议。

更新 ps ax | grep "searchd"

提供了适当的主动pid
kill 99335

RAILS_ENV=production bundle exec rake ts:rebuild
[...]
Started searchd successfully (pid: 7086)

现在两个pid用于适当的环境

shared/config/production.sphinx.conf

并重新部署。成功。所以剩下的疑问是在capistrano部署。 鉴于索引是每晚运行的(并且可以接受),deploy.rb文件是否应包含:

invoke_command "cd #{release_path} && RAILS_ENV=#{rails_env} bundle exec rake ts:rebuild"

1 个答案:

答案 0 :(得分:1)

您不需要在每次部署后运行ts:rebuild - 它就像db:migrate一样,只有在您更改索引的结构时才需要它,或者添加/删除索引。如果您只想更新索引中的数据,请使用ts:index任务(因为您已经定期执行)。

值得确保您的paths are set up correctly确保所有生产Sphinx文件都在特定版本目录之外 - 最好将它们放在共享目录或类似内容中(而不是依赖于符号链接文件) 。如果全部设置完毕,则不需要在部署过程中运行TS任务。

另外:思考Sphinx v3使用Sphinx的threaded工作人员,所以总是至少有两个进程 - 一个是主进程,一个是等待第一个连接。如果有更多的并发连接,则会有更多的搜索进程。