Heroku 上的 Flying Sphinx 错误 - 致命:锁定失败.. 资源暂时不可用

Flying Sphinx Error on Heroku - FATAL: Failed to lock.. Resource temporarily unavailable

我在 Heroku(Unicorn 服务器)上有一个 Rails (3.2) 应用 运行。我也在使用 Flying Sphinx 进行搜索。

当我尝试索引或重建时,我使用

heroky run bundle exec flying-sphinx configure
heroku run bundle exec flying-sphinx index (or rebuild)

我的一些索引在这个过程中会输出如下错误:

FATAL: failed to lock /mnt/local/flying-sphinx/4188b791429cbac91/indexes/user_delta.spl: Resource temporarily unavailable, will not index. Try --rotate option.

即使在尝试配置、重建、and/or 索引后,某些索引仍出现此错误。

此外,Heroku 上的 Flying Sphinx 状态页面指出 Sphinx 不是 运行。我不确定这是否相关。这是状态页面的屏幕截图:

如果我能提供其他任何东西,请告诉我。

编辑

我刚注意到我的重建输出中也有一个 "No Space Left on Device" 错误,不确定它是否也相关:

ERROR: index 'search_proxy_core': /mnt/local/flying-sphinx/4188b791429cbac91/indexes/search_proxy_core.tmp.spd: write error: No space left on device.

这是几件事的结合:

  • 定期使用增量索引而不是 运行 完整索引,因此增量索引变得非常非常大并且处理起来很慢。
  • Sphinx SQL 查询使用的每个外键都没有数据库索引。
  • 其中一个索引文件中的数据损坏,导致 Sphinx 在对它们的每次查询时崩溃,并且如果不重新处理索引就无法修复。

我们已准备好数据库索引,运行 重建,然后一切再次顺利进行。