【发布时间】:2010-10-20 04:18:18
【问题描述】:
我知道手动启动 sphinx 守护程序的命令。我使用 rake 任务:“rake thinking_sphinx:start” 是否可以在我的 rails 应用程序加载时启动它,这样我就不必每次都手动输入命令?
【问题讨论】:
标签: ruby-on-rails ruby automation sphinx thinking-sphinx
我知道手动启动 sphinx 守护程序的命令。我使用 rake 任务:“rake thinking_sphinx:start” 是否可以在我的 rails 应用程序加载时启动它,这样我就不必每次都手动输入命令?
【问题讨论】:
标签: ruby-on-rails ruby automation sphinx thinking-sphinx
您可以配置 daemon_controller 来执行此操作:http://blog.phusion.nl/2008/08/25/daemon_controller-a-library-for-robust-daemon-management/
【讨论】:
如果您通过 capistrano 进行部署(您应该这样做),只需将其添加为 after_deploy:
desc "每次成功部署后运行这个"
task :after_deploy, :roles => :app do
run "#{current_path}/rake thinking_sphinx:start"
end
【讨论】:
您应该能够测试它是否正在运行并从 Rails 中启动它(使用 back-ticks 或 %x{...} 表示法。
鉴于(正如您在 cmets 中所说的)这是一项 rake 任务,您可能希望这样做而不是使用反引号:
Rake::Task['thinking_sphinx:start'].invoke
【讨论】:
rake thinking_sphinx:start 放入initializers/custom.rb 中,但没有成功。 rails 正在尝试做某事,但它冻结并且服务器永远不会启动。一个例子会很有帮助
将启动它的命令放在你的 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 应用程序的路径。
【讨论】: