我的rails应用程序有一个nginx +乘客链。
现在每次服务器重启后,我需要在项目文件夹
中写入终端rake ts:start
但我怎样才能实现自动化呢?
这样在每次服务器重新启动之后认为sphinx会在终端没有我的命令的情况下自动启动吗?
我使用rails 3.2.8和ubuntu 12.04。
我无法想象我能尝试什么,请帮助我。
我该怎么做,给出一些建议?
答案 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)
我能想到两种选择。
/etc/init
中?)。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
应该停止它update-rc.d thinking_sphinx defaults
在debian-administration.org上有一篇名为making scripts run at boot time的帖子,其中有更多详细信息。