2016-09-03 8 views
0

저는 nginx와 unicorn을 사용하여 Ruby on Rails 응용 프로그램을 배포하려고합니다. 내 유니콘 init 스크립트를 실행하려고하면, 나는 다음과 같은 오류가 발생합니다 :su가 실제 사용자로 로그인했을 때와 다른 루비 버전을 사용하는 이유는 무엇입니까?

이이 명령 실행에 실패
$ sudo service rails_app start 
Starting rails_app 
-su: bundle: command not found 

: $USER 작품 단지로 로그인 한 상태에서 수동으로 유니콘을 실행하는, 그러나

su - complab -c "bundle exec unicorn -c config/unicorn.rb -E production -D" 

괜찮음 :

$ bundle exec unicorn -c config/unicorn.rb -E production 

초기화 스크립트에서 설정된 경로가 올바른지 확인했습니다. 추가 조사에서 $USER에 rbenv를 통해 설치된 2.2.0 버전의 ruby가 있고 su - $USER -c "ruby -v"을 실행하면 1.9.3에서 실행중인 것으로 나타났습니다.

나는 이미 rbenv global 2.2.0을 실행했지만 여전히 작동하지 않습니다.

su은 내가 세션을 소유 한 사용자를 일시적으로 변경할 수 있다고 생각 했습니까? su $USER은 내가 실제로 일 때와 다른 루비 버전을 표시합니다.$USER으로 로그인 했습니까?

희망을 보내주세요.

+0

을 당신은 sudo와 루비를 실행하려면이 같은 명령을 사용할 수 있습니다 비 로그인 쉘 및/또는 비대화 쉘에서 작동하도록'rbenv'를 설정 했습니까? –

+0

아니요,'su - $ USER'에서 여전히 작동 할 것이라고 생각하는'$ USER' 만 위해 설정했습니다. 나는'$ USER'의 외부에서 그것을 사용하도록 설정하는 방법을 모르겠다. ... – meyagen

답변

1

이유는 sudo이 환경 변수를 보존하지 않기 때문입니다. rbenv은 (는) 사용자 환경을 사용하고 있으므로 이후에는 작동하지 않습니다. 당신은 당신에 rbenv을 설치 한 사용자로 unicorn를 실행하려면 사용자의 응용 프로그램에 맞게 다음을 변경

ruby=`which ruby` && sudo $ruby -v 

을했다 :

!/bin/sh 

### BEGIN INIT INFO 
# Provides:   unicorn 
# Required-Start: $local_fs $remote_fs 
# Required-Stop:  $local_fs $remote_fs 
# Default-Start:  2 3 4 5 
# Default-Stop:  0 1 6 
# Short-Description: starts unicorn 
# Description:  starts uniconr using start-stop-daemon 
### END INIT INFO 

set -u 
set -e 

export PATH=/path/to/rbenv/bin:$PATH 
export RBENV_DIR=/path/to/rbenv 
export RBENV_ROOT=/path/to/rbenv 

APP_ROOT=/path/to/rack_app/root 
PID=$APP_ROOT/tmp/pids/unicorn.pid 
RAILS_ENV=production 

export PATH="$RBENV_ROOT/shims:$RBENV_ROOT/rbenv:$PATH" 
CMD="bundle exec $RBENV_ROOT/shims/unicorn -D -E $RAILS_ENV -c config/unicorn/$RAILS_ENV.rb" 


old_pid="$PID.oldbin" 

cd $APP_ROOT || exit 1 

sig() { 
    test -s "$PID" && kill -$1 `cat $PID` 
} 

oldsig() { 
    test -s $old_pid && kill -$1 `cat $old_pid` 
} 

case $1 in 
start) 
    sig 0 && echo >&2 "Already running" && exit 0 
    $CMD 
    ;; 
stop) 
    sig QUIT && exit 0 
    echo >&2 "Not running" 
    ;; 
force-stop) 
    sig TERM && 0 
    echo >&2 "Not running" 
    ;; 
restart|reload) 
    sig HUP && echo reloaded OK && exit 0 
    echo >&2 "Couldn't reload, starting '$CMD' instead" 
    $CMD 
    ;; 
upgrade) 
    sig USR2 && exit 0 
    echo >&2 "Couldn't upgrade, starting '$CMD' instead" 
    ;; 
rotate) 
    sig USR1 && echo rotated logs OK && exit 0 
    echo >&2 "Couldn't rotate logs" && 1 
    ;; 
*) 
    echo >&2 "Usage $0 <start|stop|restart|upgrade|rotate|force-stop>" 
    exit 1 
    ;; 
esac 
+0

나는 환경이 보존되지 않을 것이라는 것을 알지 못했다. 나는 설정을 어지럽히고 싶지 않았다. rbenv에 대해서도 광산 이외의 사용자 환경을 망치고 싶지 않았습니다. 나를위한 경로를 내보내기, 감사합니다! – meyagen