混合模式RVM在init脚本中使用时会出错

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

标签: rvm ubuntu-10.04 passenger

我已经在混合模式下安装了RVM,并让Phusion Passenger以独立模式运行。

我发现这个init脚本在启动时启动我的Phusion Passenger独立服务器:http://memcloud.com/note/show/167

仅修改规定值,它给了我以下错误,但仍然会运行

-su: /home/myuser/.rvm/bin/rvm: No such file or directory

我在which rvm中运行myuser,发现RVM在/usr/local/rvm/bin/rvm。因此,我更新了RVM变量以反映这一点,并将RVM="$USER_HOME/.rvm/bin/rvm"更改为RVM="/usr/local/rvm/bin/rv"。现在它给了我以下信息,但它仍在运行。

RVM is not a function, selecting rubies with 'rvm use ...' will not work.

如果系统正在运行,不确定它是否有问题,但我只是想确定。

1 个答案:

答案 0 :(得分:0)

我会说这个脚本错了,你应该使用更像这样的东西:

#!/usr/bin/env bash

### BEGIN INIT INFO 
# Provides:          my-app passenger in standalone 
# Default-Start:     2 3 4 5 
# Default-Stop:      0 1 6 
# Short-Description: Start/stop my-app web site 
### END INIT INFO 

# BEGIN MINIMAL CHANGES
USER=www-data
USER_HOME=/var/www
APP_PATH=/var/www/my-app/current
GEM_SET=ruby-1.8.7-p330@my-app
ADDRESS=127.0.0.1
PORT=3000
ENVIRONMENT=production
# END MINIMAL CHANGES

RVM="/usr/local/rvm/bin/rvm"
PASSENGER="$USER_HOME/.rvm/gems/$GEM_SET/bin/passenger"
PASSENGER="cd $APP_PATH; $RVM $GEM_SET do $PASSENGER"

CMD_START="$PASSENGER start -a $ADDRESS -p $PORT -e $ENVIRONMENT -d"
CMD_STOP="$PASSENGER stop -p $PORT"

. /lib/lsb/init-functions
case "$1" in
  start)
    echo "Starting myapp passenger" 
    echo $CMD_START
    su - $USER -c "$CMD_START"
    ;;
  stop)
    echo "Stopping myapp passenger" 
    echo $CMD_STOP
    su - $USER -c "$CMD_STOP"
    ;;
  *)
    echo "Usage: $0 start|stop" >&2
    exit 3
    ;;
esac

您还可以替换GEM_SET=.以使rvm使用ruby存储在.rvmrc中,但这需要$USER信任.rvmrc ...这也可以在此处完成脚本:

su - $USER -c "rvm rvmrc trust $APP_PATH"

start)

中称为第一行