Ruby on rails 使用Runit和用户启动Unicorn';s RVM

Ruby on rails 使用Runit和用户启动Unicorn';s RVM,ruby-on-rails,rvm,chef-infra,unicorn,runit,Ruby On Rails,Rvm,Chef Infra,Unicorn,Runit,我正在与Chef一起部署Rails应用程序服务器。我刚从Ruby的源安装切换到RVM(因为我的部署用户有问题) 现在我已经对部署进行了排序,对资产进行了编译,bundler安装了我所有的gems 我的问题是用Runit管理独角兽。 RVM不是以root用户的身份安装的-仅当我的部署用户拥有它时,如下所示: $ rvm list rvm rubies =* ruby-2.0.0-p247 [ x86_64 ] 我可以从部署用户手动成功启动Unicorn。但是,它不会作为runit的一部分

我正在与Chef一起部署Rails应用程序服务器。我刚从Ruby的源安装切换到RVM(因为我的部署用户有问题)

现在我已经对部署进行了排序,对资产进行了编译,bundler安装了我所有的gems

我的问题是用Runit管理独角兽。

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

$ rvm list
rvm rubies    
=* ruby-2.0.0-p247 [ x86_64 ]
我可以从部署用户手动成功启动Unicorn。但是,它不会作为runit的一部分启动

我的运行文件如下所示。我在这方面也尝试过解决办法,但没有成功

#!/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身份运行。但是,如果我从runit调用它,我会看到workers启动,但我得到了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?

您的运行文件出错了,您使用的是二进制文件,而没有设置环境,为此,您应该使用包装器:

rvm wrapper ruby-2.0.0-p247 --no-links unicorn
要简化脚本,请使用alias,以便在决定使用哪个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来运行它,只需将alias包装成一个新的ruby即可。

您的运行文件做错了,您使用的是二进制文件而没有设置环境,为此,您应该使用包装器:

rvm wrapper ruby-2.0.0-p247 --no-links unicorn
要简化脚本,请使用alias,以便在决定使用哪个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来运行它时,只需将alias包装成一个新的ruby即可。

谢谢您的回答。我以部署用户的身份运行了包装器和别名(假设是这样,因为root用户没有访问rvm的权限)。但是runit仍然不会启动它,如果我以root用户身份手动运行,它会给出:ruby\u noexec\u wrapper not found。实际上已经完成了。需要杀死守护进程几次。谢谢,快乐的日子:)谢谢你的回答。我以部署用户的身份运行了包装器和别名(假设是这样,因为root用户没有访问rvm的权限)。但是runit仍然不会启动它,如果我以root用户身份手动运行,它会给出:ruby\u noexec\u wrapper not found。实际上已经完成了。需要杀死守护进程几次。谢谢,快乐的日子:)