0

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

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

我遇到的问题是用 Runit 监督独角兽..

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 )。但是,如果我从 runit 调用它,我会看到工作人员启动,但我得到了两个 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

我应该在这里做什么?回到运行良好的监视器?

4

1 回答 1

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​​。

于 2013-08-29T05:13:17.630 回答