在ruby代码中更新思考sphinx索引

时间:2013-11-14 12:42:36

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

我有app,在ubuntu 12.04上运行,使用nginx + passenger 在我的方法中,我尝试重建sphinx索引,所以:

  def update_sphinx_index
    Rails.application.load_tasks
    Rake::Task['ts:rebuild'].invoke
    redirect_to admin_mainpage_path
  end

我也试试:

`rake ts:index`

但没有任何事情发生,sphinx指数不会重建。我做错了什么?也许我需要用一些特权或其他东西来做这件事,因为当我做rake ts:在命令终端重建一切都很好,并且索引重建。

2 个答案:

答案 0 :(得分:4)

首先,我真的不喜欢从控制器调用sphinx reindex的想法。这里的最佳实践是使用增量进行部分索引(使用resque的增量是几乎实时索引的一个很好的解决方案)然后偶尔重新索引一次以压缩文件。

但是如果出于任何原因你真的需要从控制器运行它,我会说有两件事需要考虑。一个是您可能不在正确的目录中,因此您可以尝试发出系统调用,更改为目录然后执行rake,如

`cd /path/to/your/app rake ts:index`

除此之外,如果您遵循最佳做法,执行Web服务器的用户将是弱势用户,类似于属于www-data组的用户。该用户很可能无权执行rake或编写索引文件,因此请确保启动Web服务器的用户具有正确的权限。

答案 1 :(得分:3)

ts:rebuild停止sphinx,重建索引然后重新启动,只有在你改变了索引的结构时才应该运行。

相反,如果您只是添加新数据,则应该运行ts:index

至于为什么rake任务没有执行,可能是你的搜索守护进程仍然在运行。