我的 Rails 应用程序有一个 nginx + 乘客链。
现在每次服务器重新启动后,我需要在项目文件夹中的终端中写入
rake ts:start
但我怎样才能自动化呢?
这样在每个服务器重新启动后,没有我在终端中的命令就可以自动启动狮身人面像?
我使用 rails 3.2.8 和 ubuntu 12.04。
我无法想象我能尝试什么,请帮助我。
我该怎么做,给一些建议?
我的 Rails 应用程序有一个 nginx + 乘客链。
现在每次服务器重新启动后,我需要在项目文件夹中的终端中写入
rake ts:start
但我怎样才能自动化呢?
这样在每个服务器重新启动后,没有我在终端中的命令就可以自动启动狮身人面像?
我使用 rails 3.2.8 和 ubuntu 12.04。
我无法想象我能尝试什么,请帮助我。
我该怎么做,给一些建议?
我做了什么来解决同样的问题:
在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 管理服务。
如果您使用优秀的when gem 来管理您的crontab,您可以放
every :reboot do
rake "ts:start"
end
在你的schedule.rb
,它似乎工作得很好。我刚刚在运行 Ubuntu 14.04 的 EC2 实例上进行了测试。
我能想到的有两个选择。
/etc/init
?)。Monit 和其他此类工具的问题在于,当您故意停止 Sphinx(例如,更新配置结构和相应的索引更改)时,它可能会在合适之前再次启动它。所以我认为你应该从这两个选项中的第一个开始——我只是不太了解这种方法的细节。
我按照@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
应该停止它update-rc.d thinking_sphinx defaults
debian-administration.org 上有一篇很好的帖子,名为让脚本在启动时运行,其中包含更多详细信息。