7

nginx + passengerを使用して、ubuntu 12.04で実行されるアプリがあります。私の方法では、スフィンクスインデックスを再構築しようとしています:

  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 を使用したデルタは、ほぼリアルタイムのインデックス作成に最適なソリューションです)、時々再インデックス化してファイルを圧縮することです。

しかし、何らかの理由でこれをコントローラーから実行する必要がある場合は、考慮すべき点が 2 つあります。1つは、おそらく正しいディレクトリにいない可能性があるため、次のように、ディレクトリに変更してからrakeを実行するシステムコールを発行しようとすることができます

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

これとは別に、ベスト プラクティスに従っている場合、Web サーバーを実行するユーザーは、www-data グループに属するユーザーのような権限のないユーザーになります。このユーザーは、rake を実行したり、インデックス ファイルを書き込んだりするパーミッションを持っていない可能性が非常に高いため、Web サーバーを起動するユーザーが適切なパーミッションを持っていることを確認してください。

于 2013-12-10T01:20:49.473 に答える
3

ts:rebuildsphinx を停止し、インデックスを再構築してから再起動します。インデックスの構造を変更した場合にのみ実行する必要があります。

ts:index代わりに、新しいデータを追加するだけの場合は実行する必要があります。

rake タスクが実行されない理由については、検索デーモンがまだ実行されている可能性があります。

于 2013-11-16T13:08:00.233 に答える