7

我有应用程序,它在 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`

但什么也没发生,狮身人面像索引不会重建。我做错了什么?也许我需要一些特权或其他东西来做到这一点,因为当我在命令终端中执行 rake ts:rebuild 时一切都很好,并且索引重建。

4

2 回答 2

4

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

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

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

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

于 2013-12-10T01:20:49.473 回答
3

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

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

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

于 2013-11-16T13:08:00.233 回答