1

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

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

rake ts:start

但我怎样才能自动化呢?

这样在每个服务器重新启动后,没有我在终端中的命令就可以自动启动狮身人面像?

我使用 rails 3.2.8 和 ubuntu 12.04。

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

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

4

4 回答 4

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说一句:

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

于 2013-09-30T14:27:32.290 回答
2

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

every :reboot do
  rake "ts:start"
end

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

于 2016-06-24T13:49:24.880 回答
1

我能想到的有两个选择。

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

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

于 2013-08-02T00:11:17.720 回答
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 上有一篇很好的帖子,名为让脚本在启动时运行,其中包含更多详细信息。

于 2015-12-02T16:52:12.047 回答