Ruby on rails 如何在rails应用程序加载时自动启动sphinx守护进程?

Ruby on rails 如何在rails应用程序加载时自动启动sphinx守护进程?,ruby-on-rails,ruby,automation,sphinx,thinking-sphinx,Ruby On Rails,Ruby,Automation,Sphinx,Thinking Sphinx,我知道手动启动sphinx守护进程的命令。我使用一个rake任务:“rake thinking_sphinx:start”是否可以在我的rails应用程序加载时启动它,这样我就不必每次都手动键入命令?您应该能够测试它是否正在运行,并从rails中启动它(使用或%x{…}符号) 考虑到(正如您在评论中所说)这是一个rake任务,您可能希望这样做,而不是使用back ticks: Rake::Task['thinking_sphinx:start'].invoke 在你的config/initia

我知道手动启动sphinx守护进程的命令。我使用一个rake任务:“rake thinking_sphinx:start”是否可以在我的rails应用程序加载时启动它,这样我就不必每次都手动键入命令?

您应该能够测试它是否正在运行,并从rails中启动它(使用或
%x{…}
符号)

考虑到(正如您在评论中所说)这是一个rake任务,您可能希望这样做,而不是使用back ticks:

Rake::Task['thinking_sphinx:start'].invoke

在你的config/initializers/custom.rb中输入启动命令,我不得不在我的应用程序中执行相同的操作,但在windows中。如果你也处于同样的困境,你会发现如果你执行以下操作,你的生活会轻松得多:

if app_not_already_running
  IO.popen("start app") do |fd|
  end
end
我正在查看旧代码,我不记得do | fd |是否真的有必要。试一试


“开始”之所以重要,是为了说服windows将这件该死的事情背景化。是啊!

如果您是通过capistrano部署的(您应该这样做),只需将其添加为后部署:

desc“每次成功部署后运行此操作”


您可以配置daemon_controller来执行此操作:

如上所述,在config/initializers中创建一个文件。例如,我创建了一个名为initializers/start_thinking_sphinx.rb的文件

require 'rake'
require 'rake/testtask'
require 'rake/rdoctask'
require 'tasks/rails'
require "#{RAILS_ROOT}/vendor/plugins/thinking-sphinx/tasks/thinking_sphinx_tasks"
Rake::Task['thinking_sphinx:start'].invoke

如果我用script/server启动服务器,这就行了。但是如果我用passenger启动服务器,这就行不通了:(

虽然这篇文章很老了,但我添加我的解决方案只是为了完整

我在不使用rake的情况下启动sphinx守护进程,方法是将以下代码放入config/initializers/launch_sphinx.rb

Kernel.system("/usr/local/sphinx/bin/searchd --pidfile --config [full-path-to-your-app]/config/#{RAILS_ENV}.sphinx.config")
重要


根据您的需要更改searchd和rails应用程序的路径。

我基本上只是尝试在初始化时运行rake任务,因此不确定应用程序我尝试将
rake thinking\u sphinx:start
放入initializers/custom.rb中,但运气不佳。rails正在尝试做一些事情,但它会冻结,服务器永远不会启动。检查ple将非常有用。我没有对rake任务执行此操作。您可能希望确保您位于正确的目录中。鉴于这是一个rake任务,我将更新我的答案…谢谢,比以前更好…但rake未被识别。`load_missing_constant':未初始化的常量rake(NameError)你会把代码放在哪里?我想我需要包含一些东西或将代码移到其他地方…嗯…所以我添加了require'rake'…现在我得到了这个错误:不知道如何构建任务'thinking_sphinx:start'(RuntimeError)任务是在哪里定义的?你需要把它放在应用程序的lib/tasks/或类似的东西中。酷……我希望这也发生在我的本地机器上。我想无论何时启动服务器(ruby脚本/服务器),sphinx都应该启动
Kernel.system("/usr/local/sphinx/bin/searchd --pidfile --config [full-path-to-your-app]/config/#{RAILS_ENV}.sphinx.config")