如何在启动时自动创建救援人员?

时间:2012-01-02 05:03:28

标签: ruby redis passenger rack resque

好的,我正在制作我的第一个ruby应用程序。谁知道将所有东西都移到'生产'上就太复杂了。到目前为止,我一直在努力配置乘客,让它在启动时运行,然后让redis在启动时运行。

我的最后一项任务是在启动时添加1名工作人员。现在,我必须ssh并运行我的rake命令rake workers:start。显然,当我想关闭ssh时,这并不好......所以我真的不知道下一步是怎么做的。

我尝试将resque默认配置复制到config.ru,它只是炸毁Passenger有错误。我也调查了一些人提到的resque-pool,但这已经超出了我的想法。

我所要做的就是在启动时添加1名工作人员。在这一点上,这并不是一个如此简单的app应该是最好的。

2 个答案:

答案 0 :(得分:7)

我不使用神宝石,因为(1)我看到一个项目因其引入的设置的复杂性而受到严重打击,(2)我个人对标准Linux(Ubuntu)非常满意处理这类事情的工具。

在启动时启动Resque worker

我的/etc/rc.local文件中有此代码。我在系统上有 deploy 用户:

# Start Resque
su -l deploy -c "/home/deploy/start-resque-workers"
su -l deploy -c "/home/deploy/start-resque-webui"

然后,在这些脚本中,我设置了ruby环境并运行rake任务:

# Load RVM into a shell session *as a function*
if [[ -s "$HOME/.rvm/scripts/rvm" ]] ; then
  # First try to load from a user install
  source "$HOME/.rvm/scripts/rvm"
elif [[ -s "/usr/local/rvm/scripts/rvm" ]] ; then
  # Then try to load from a root install
  source "/usr/local/rvm/scripts/rvm"
else
  printf "ERROR: An RVM installation was not found.\n"
fi

# Use rvm to switch to the default ruby. 
rvm use default

# Now launch the app
cd /home/deploy/app-name-here/current
nohup rake QUEUE=* RAILS_ENV=production environment resque:work &

我多年来一直在使用这种设置,而且它很坚固。服务器不会崩溃。我还不需要安装另一个系统(比如神宝石)监视这些其他服务器的开销。

此外,我使用capistrano gem来处理部署时重新启动工作程序。

答案 1 :(得分:4)

在制作中,您应该使用god来观看您的流程。即使这个项目很小,我强烈建议您投入时间并进行设置。

另一个重要的必须Capistrano

所以,如果你使用的是上帝,这里有config file可以帮助你。

您还可以尝试在系统启动时使用rake resque:work/etc/init.d/或另一个(取决于您使用的系统)中的正确脚本来安排/etc/init/。我前段时间试过这个,但我放弃了(不记得为什么)。

据我所知,我的回答并非正是您现在正在寻找的。但想象一下:如果一切都已设置好,那么部署下一个版本就像在开发机器上运行rake deploy一样简单。它将负责从存储库中提取代码,运行迁移,重新启动工作人员和Web服务器等等。