【问题标题】:start thinking sphinx on rails server startup在 Rails 服务器启动上开始思考 sphinx
【发布时间】:2016-06-24 21:49:24
【问题描述】:

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

现在每次服务器重启后,我需要在项目文件夹中的终端中写入

rake ts:start

但是我怎样才能使它自动化呢?

所以在每次服务器重启后认为 sphinx 会自动启动而无需我在终端中发出命令?

我使用 rails 3.2.8 和 ubuntu 12.04。

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

我该怎么做,给点建议?

【问题讨论】:

  • 你可以在rails应用程序的initializers文件夹中创建一个文件ts_server_start.rb然后你可以使用system "rake ts:start"它会在应用程序初始化时自动启动它
  • @Rajarshi 但是如果它已经开始了怎么办?添加一些检查会很好

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


【解决方案1】:

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

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 输入:

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 管理服务。

【讨论】:

  • 对我来说(rails4、mysql2、ts-3.1.0)是rescue ThinkingSphinx::ConnectionError
【解决方案2】:

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

every :reboot do
  rake "ts:start"
end

在您的schedule.rb 中,它似乎工作得很好。我刚刚在运行 Ubuntu 14.04 的 EC2 实例上进行了测试。

【讨论】:

  • 谢谢!经过 4 小时的“任何时候”失败后,它有助于解决我的问题!但我使用以下命令运行它:every :reboot do command "cd #{Dir.pwd} && RAILS_ENV=#{@environment} bundle exec rake ts:restart" end
【解决方案3】:

我能想到两个选项。

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

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

【讨论】:

    【解决方案4】:

    我按照@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 的好帖子,其中包含更多详细信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-15
      • 1970-01-01
      • 2011-06-11
      • 1970-01-01
      • 1970-01-01
      • 2017-09-02
      • 1970-01-01
      相关资源
      最近更新 更多