开始在rails服务器启动时思考sphinx

时间:2013-08-01 13:15:34

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

我的rails应用程序有一个nginx +乘客链。

现在每次服务器重启后,我需要在项目文件夹

中写入终端
rake ts:start

但我怎样才能实现自动化呢?

这样在每次服务器重新启动之后认为sphinx会在终端没有我的命令的情况下自动启动吗?

我使用rails 3.2.8和ubuntu 12.04。

我无法想象我能尝试什么,请帮助我。

我该怎么做,给出一些建议?

4 个答案:

答案 0 :(得分:3)

我为解决同样的问题做了什么:

config/application.rb中,添加:

module Rails
  def self.rake?
    !!@rake
  end

  def self.rake=(value)
    @rake = !!value
  end
end

Rakefile中,添加以下行:

Rails.rake = true

最后,在config/initializers/start_thinking_sphinx.rb put:

unless Rails.rake?
  begin
    # Prope ts connection
    ThinkingSphinx.search "test", :populate => true
  rescue Mysql2::Error => err
    puts ">>> ThinkingSphinx is unavailable. Trying to start .."
    MyApp::Application.load_tasks
    Rake::Task['ts:start'].invoke
  end
end

(将上面的MyApp替换为您应用的名称)

到目前为止似乎工作,但如果我遇到任何问题,我会在这里发布。

显然,上面没有注意监视服务器是否保持运行状态。您可能希望单独执行此操作。或者另一种方法是使用Upstart来管理服务。

答案 1 :(得分:2)

如果你使用优秀的whenever gem来管理你的crontab,你可以放

every :reboot do
  rake "ts:start"
end

在你的schedule.rb中,似乎效果很好。我刚刚在运行Ubuntu 14.04的EC2实例上进行了测试。

答案 2 :(得分:1)

我能想到两种选择。

  • 您可以看看Ubuntu如何管理启动脚本并为此添加一个(可能在/etc/init中?)。
  • 您可以设置monit或其他监控工具,让它保持Sphinx运行。 Monit应该在服务器重新启动时自动启动,因此它应该确保Sphinx(以及它正在跟踪的任何其他内容)正在运行。

Monit和其他此类工具的问题在于,当您故意停止Sphinx(例如,更新配置结构和相应的索引更改)时,它可能会在适当之前再次启动它。所以我认为你应该从这两个选项中的第一个开始 - 我只是不太了解这个方法的细节。

答案 3 :(得分:1)

我按照@pat的建议编写了一个脚本,以便在服务器启动时启动ThinkingSphinx。你可以把它看作一个要点 - https://gist.github.com/declan/4b7cc4fb4926df16f54c

我们使用Capistrano部署到Ubuntu 14.04,您可能需要修改路径和用户名以匹配您的服务器设置。否则,您需要做的就是

  • 将此脚本放入/etc/init.d/thinking_sphinx
  • 确认脚本有效:在命令行上调用/etc/init.d/thinking_sphinx start应该为您的应用启动ThinkingSphinx,/etc/init.d/thinking_sphinx stop应该停止它
  • 告诉Ubuntu在启动时自动运行此脚本:update-rc.d thinking_sphinx defaults

在debian-administration.org上有一篇名为making scripts run at boot time的帖子,其中有更多详细信息。