ruby-on-rails-3 - 为什么我无法阻止 Solr 运行?

标签 ruby-on-rails-3 sunspot-rails sunspot-solr

sunspot_solr我使用的版本是1.3.3。

我正在使用sunspot_solr gem启动和停止 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”仅用于在 shell 中启动服务器。

当我捕获 pid 文件时,我看到:

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

这意味着 rake sunspot:solr:stop正在杀死“4758”并让“4761”继续运行。

最佳答案

这是一个错误!

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 #line 103

exec(Shellwords.shelljoin(command))

Shellwords.shelljoin(command) 是一个字符串,但是Kernel#exec描述:

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

如果给出单个字符串作为命令,则将其视为在执行之前经过 shell 扩展的命令行。标准 shell 在类 Unix 系统上始终表示“/bin/sh”。

所以,它将启动两个进程。

使用这个: 执行(*命令)

将启动一个进程,因此 rake sunspot:solr:stop 将正常工作。

see this pull request

关于ruby-on-rails-3 - 为什么我无法阻止 Solr 运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12238257/

相关文章:

ruby-on-rails - Postgres hstore 和 Rails sunspot solr

ruby-on-rails - 将带有 sunspot 的 Rails 应用程序连接到经过授权的 tomcat/solr 服务器

solr - Solr:无法搜索包含字符的数字

ruby-on-rails - 为什么 Rails 命令会强制显示 `new` 命令的帮助消息?

solr - 查看单个文档中单个字段的原始 Solr 标记

ruby-on-rails-3 - 太阳黑子 : boost scalar fields

ruby-on-rails - 如何删除重复的验证错误

ruby-on-rails - rails : How to make "button_to" button to appear on the sameline (without a newline)?

javascript 没有在带有 rails 3.1 的 heroku 上运行