使用Runit和用户的RVM启动Unicorn

时间:2013-08-29 00:14:34

标签: ruby-on-rails rvm chef unicorn runit

我正在使用Chef部署我的Rails应用服务器。刚刚从Ruby的源代码安装交换到RVM(因为我的部署用户遇到了问题)。

现在我的部署已排序,资产已编译,捆绑包已安装我的所有宝石。

我遇到的问题是用Runit监督Unicorn ..

RVM未以root用户身份安装 - 仅在我的部署用户拥有它时,如下所示:

$ rvm list
rvm rubies    
=* ruby-2.0.0-p247 [ x86_64 ]

我可以从部署用户手动成功启动Unicorn。但是,它不会作为runit的一部分启动。

我的运行文件看起来像这样。我也试过这个SO question的解决方案失败了..

#!/bin/bash
cd /var/www/html/deploy/production/current
exec 2>&1
exec chpst -u deploy:deploy /home/deploy/.rvm/gems/ruby-2.0.0-p247/bin/unicorn -E production -c config/unicorn_production.rb

如果我手动运行,我会收到此错误:

/usr/bin/env: ruby_noexec_wrapper: No such file or directory

我创建了一个以root身份运行的小脚本(gist here)。但是,如果我从runit调用它,我看到worker启动但是我得到了两个runit进程,我无法停止或重启服务:

ps的输出:

1001     29062     1  0 00:08 ?        00:00:00 unicorn master -D -E production -c /var/www/html/deploy/production/current/config/unicorn_production.rb                                                                                                                    
1001     29065 29062  9 00:08 ?        00:00:12 unicorn worker[0] -D -E production -c /var/www/html/deploy/production/current/config/unicorn_production.rb                                                                                                                 
root     29076   920  0 00:08 ?        00:00:00 su - deploy -c cd /var/www/html/deploy/production/current; export GEM_HOME=/home/deploy/.rvm/gems/ruby-2.0.0-p247; /home/deploy/.rvm/gems/ruby-2.0.0-p247/bin/unicorn -D -E production -c /var/www/html/deploy/production/current/config/unicorn_production.rb
1001     29083 29076  0 00:08 ?        00:00:00 -su -c cd /var/www/html/deploy/production/current; export GEM_HOME=/home/deploy/.rvm/gems/ruby-2.0.0-p247; /home/deploy/.rvm/gems/ruby-2.0.0-p247/bin/unicorn -D -E production -c /var/www/html/deploy/production/current/config/unicorn_production.rb

我该怎么办?回到monit哪个效果很好?

1 个答案:

答案 0 :(得分:4)

你的运行文件做错了,你在没有设置环境的情况下使用二进制文件,为此你应该使用包装器:

rvm wrapper ruby-2.0.0-p247 --no-links unicorn

为了简化脚本使用别名,因此在您决定应该使用哪个ruby时不需要更改它:

rvm alias create my_app_unicorn ruby-2.0.0-p247

将脚本更改为:

#!/bin/bash
cd /var/www/html/deploy/production/current
exec 2>&1
exec chpst -u deploy:deploy /home/deploy/.rvm/wrappers/my_app_unicorn/unicorn -E production -c config/unicorn_production.rb

这将确保使用适当的环境来执行unicorn,并且只要您想要更改用于运行它的ruby,只需将别名设置为新的ruby。