当我的rails应用程序加载时,如何自动启动sphinx守护程序?

时间:2009-04-17 18:06:51

标签: ruby-on-rails ruby automation sphinx thinking-sphinx

我知道手动启动sphinx守护程序的命令。我使用rake任务:“rake thinking_sphinx:start”每当我的rails应用程序加载时它是否可以启动它所以我不必每次都手动输入命令?

7 个答案:

答案 0 :(得分:3)

如果你通过capistrano部署(你应该这样做),只需将其添加为after_deploy:

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

  task :after_deploy, :roles => :app do
        run "#{current_path}/rake thinking_sphinx:start"
  end

答案 1 :(得分:3)

答案 2 :(得分:2)

您应该能够测试它是否正在运行并从rails中启动它(使用back-ticks%x{...}表示法。

鉴于(正如你在评论中所说的那样)这是一个rake任务,你可能想要这样做,而不是使用反向标记:

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

答案 3 :(得分:1)

将命令放入config / initializers / custom.rb

中启动它

答案 4 :(得分:0)

我必须在我的应用程序中执行相同的操作,但使用Windows。如果你遇到同样的问题,你会发现,如果你做了类似的事情,你的生活会更容易:

if app_not_already_running
  IO.popen("start app") do |fd|
  end
end

我正在查看旧代码,我不记得是否执行了| fd |真的很有必要。试一试。

'开始'很重要的原因是让窗户成为背景被诅咒的东西。 Yargh!

答案 5 :(得分:0)

如上所述,在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

如果我随后使用脚本/服务器启动服务器,则此方法有效。但是,如果我从乘客开始不起作用:(

答案 6 :(得分:0)

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

我通过将以下代码添加到config / initializers / launch_sphinx.rb来启动sphinx守护程序而不使用rake。

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

重要

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