为什么在尝试将unicorn_rails作为守护进程启动时会停止ruby脚本?

时间:2012-03-05 04:20:47

标签: ruby ruby-on-rails-3 bash unicorn

我正在尝试在ruby脚本中启动unicorn_rails,并在脚本中执行许多命令后,当脚本到达以下行时

 %x[bash -ic "bash <(. ~/.bashrc); cd /home/www-data/rails_app;   bundle exec unicorn_rails -p 8000 -E production -c /home/www-data/rails_app/config/unicorn.rb  -D"]

脚本停止,生成以下输出

[1]+  Stopped                 ./setup_rails.rb

并返回Linux提示符。如果我输入“fg”,脚本就会运行,脚本停止的行会被执行,而unicorn会作为守护进程启动。

如果我在一个单独的脚本中运行该行,脚本就会完成而不会停止。

UPDATE_1 -

我源.bashrc因为我在脚本的前面安装了rvm并让它在正确的环境下运行我有以下内容:

 %x[echo "[[ -s \"$HOME/.rvm/scripts/rvm\" ]] && source \"$HOME/.rvm/scripts/rvm\""  >> .bashrc]
 %x[bash -ic "bash <(. ~/.bashrc); rvm install ruby-1.9.2-p290; rvm 1.9.2-p290 --default;"]

所以如果我想运行正确版本的rvm,ruby和bundle我需要源.bashrc

结束UPDATE_1

有没有人知道什么可能导致ruby脚本停止,就好像按下了control-Z一样?

1 个答案:

答案 0 :(得分:1)

不确定为什么它会停止,但我的一般经验法则是永远不要在脚本中找到我的.bashrc - 这可能是你问题的根源,但是我不能确定它没有看到它的内容。您应该能够将脚本更改为:

$ vi setup_rails.sh

#!/usr/bin/bash

# EDIT from comments below
#  expanding from a one liner to a better script...

$RVM_PATH=$HOME/.rvm/scripts

# install 1.9.2-p290 unless it's installed
$RVM_PATH/rvm info 1.9.2-p290 2&>1 >/dev/null || $RVM_SH install 1.9.2-p290 

# run startup command inside rvm shell
$RVM_PATH/rvm-shell 1.9.2-p290 -c "cd /home/www-data/rails_app && bundle exec unicorn_rails -p 8000 -E production -c /home/www-data/rails_app/config/unicorn.rb  -D"

这应该会给你相同的结果。