我知道手动启动 sphinx 守护进程的命令。我使用 rake 任务:“rake thinking_sphinx:start” 是否可以在我的 rails 应用程序加载时启动它,这样我就不必每次都手动输入命令?
7 回答
如果您通过 capistrano 进行部署(您应该这样做),只需将其添加为 after_deploy:
desc "每次成功部署后运行它"
task :after_deploy, :roles => :app do
run "#{current_path}/rake thinking_sphinx:start"
end
您可以配置 daemon_controller 来执行此操作:http: //blog.phusion.nl/2008/08/25/daemon_controller-a-library-for-robust-daemon-management/
您应该能够测试它是否正在运行并从 Rails 内启动它(使用反引号或%x{...}
符号。
鉴于(正如您在评论中所说)这是一项 rake 任务,您可能希望这样做而不是使用反引号:
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| 真的很有必要。试一试。
“开始”很重要的原因是让窗口成为被诅咒的东西的背景。啊!
如上所述,在 config/initializers.xml 中创建一个文件。例如,我创建了一个名为 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
如果我随后使用脚本/服务器启动服务器,这将有效。但是,如果我从乘客开始 :(
虽然这篇文章已经很老了,但为了完整起见,我添加了我的解决方案......
我在不使用 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 应用程序的路径。