2

私が使用しているsunspot_solrのバージョンは1.3.3です。

私はsunspot_solrgemを使用して、Solrのローカルインスタンスを開始および停止しています。次のコマンドを使用して起動します。

rake sunspot:solr:start

そしてそれを停止するための次のコマンド:

rake sunspot:solr:stop

ただし、停止は機能していません。pidsフォルダーに書き込まれたpidが正しくないことに気づきました。

起動すると、ps -ef | grep 'java'コマンドの出力として次のように表示されます。

1000      4758  4752  0 20:32 ?        00:00:00 sh -c java -Djetty.port\=8982 -Dsolr.data.dir\=/home/panayotis/my_documents/ezMTA/solr/data/development -Dsolr.solr.home\=/home/panayotis/my_documents/ezMTA/solr -Djava.util.logging.config.file\=/tmp/logging.properties20120902-4758-13patuu -jar start.jar

1000      4761  4758  7 20:32 ?        00:00:01 java -Djetty.port=8982 -Dsolr.data.dir=/home/panayotis/my_documents/ezMTA/solr/data/development -Dsolr.solr.home=/home/panayotis/my_documents/ezMTA/solr -Djava.util.logging.config.file=/tmp/logging.properties20120902-4758-13patuu -jar start.jar

これは、実サーバープロセスがpid「4761」のプロセスであることを意味します。プロセス「4758」は、サーバーをシェルで起動するためだけにあります。

pidファイルをcatすると、次のように表示されます。

cat solr/pids/development/sunspot-solr-development.pid
4758

これは、rake sunspot:solr:stop「4758」を強制終了し、「4761」を稼働させたままにすることを意味します。

4

3 に答える 3

3

バグです!

1000      4758  4752  0 20:32 ?        00:00:00 sh -c java -Djetty.port\=8982 -    Dsolr.data.dir\=/home/panayotis/my_documents/ezMTA/solr/data/development -Dsolr.solr.home\=/home/panayotis/my_documents/ezMTA/solr -Djava.util.logging.config.file\=/tmp/logging.properties20120902-4758-13patuu -jar start.jar

1000      4761  4758  7 20:32 ?        00:00:01 java -Djetty.port=8982 -Dsolr.data.dir=/home/panayotis/my_documents/ezMTA/solr/data/development -Dsolr.solr.home=/home/panayotis/my_documents/ezMTA/solr -Djava.util.logging.config.file=/tmp/logging.properties20120902-4758-13patuu -jar start.jar

プロセス4758はフォアグラウンドプロセスですが、プロセス4761はバックグラウンドプロセスであるため、pid 4758を強制終了しても、子プロセス4761は破棄されず、initプロセスはプロセス4761の親になります。

sunspot_solr / lib / sunspot / solr / server.rb#line103にあります

exec(Shellwords.shelljoin(command))

Shellwords.shelljoin(command)は文字列ですが、Kernel#execの説明:

exec([env,] command... [,options])

コマンドとして単一の文字列が指定された場合、それは実行される前にシェル拡張の対象となるコマンドラインと見なされます。標準シェルは、Unixライクなシステムでは常に「/ bin/sh」を意味します。

したがって、2つのプロセスを開始します。

これを使用してください:exec(* command)

1つのプロセスが開始されるため、rake sunspot:solr:stopは正しく機能します。

このプルリクエストを参照してください

于 2012-11-13T01:39:19.500 に答える
1

にダウングレードしましたが、問題'sunspot_solr', '1.3.1'なく動作します。

于 2012-09-29T06:52:25.193 に答える
-1

このようにenvを設定します-RAILS_ENV=production rake sunspot:solr:stop

于 2017-07-28T13:28:53.290 に答える