我有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:在命令终端重建一切都很好,并且索引重建。
答案 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任务没有执行,可能是你的搜索守护进程仍然在运行。