如何在启动时自动创建resque worker?

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

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

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

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

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

另一个必须是Capistrano 。

所以,如果你使用的是上帝,这里有一个可以帮助你的配置文件 。

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

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

我没有使用神gem,因为(1)我看到一个项目因其引入的设置的复杂性而非常糟糕,以及(2)我个人对使用的标准Linux(Ubuntu)工具非常满意这种事。

在启动时启动Resque worker

我在/etc/rc.local文件中有这个代码。 我在系统上有一个部署用户:

 # 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 & 

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

另外,我使用capistrano gem来处理重新启动部署的worker。