2016-09-03 1 views
0

私は、nginxとunicornを使ってRuby on Railsアプリケーションを配備しようとしています。私は私のユニコーンinitスクリプトを実行しようとすると、私は次のエラーを取得する:suが実際のユーザーとしてログインしているときと比べて、別のルビーバージョンを使用しているのはなぜですか?

$ sudo service rails_app start 
Starting rails_app 
-su: bundle: command not found 

それは、このコマンドで実行に失敗:

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

しかし、ちょうど$USER作品としてログインし、手動でユニコーンを実行しています罰金:

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

私は、initスクリプトで設定されたパスが正しいことを確認しました。さらに調査したところ、$USERにはrbenv経由でインストールされたrubyバージョン2.2.0がありましたが、su - $USER -c "ruby -v"を実行すると、1.9.3で動作していることがわかりました。

私は既にrbenv global 2.2.0を実行していますが、まだ動作しません。

suは、セッションを所有しているユーザーを一時的に変更できたと思いましたか? su $USERは私がであるときと実際にはと異なるルビーバージョンを表示するのはなぜですか?$USERとしてログインしていますか?

あなたが私を助けることを願っています!

+0

ログインしていないシェルや非対話シェルで動作するよう 'rbenv'を設定しましたか? –

+0

いいえ、 'su - $ USER'でも動作すると思う私の' $ USER'のためだけに設定しました。私は '$ USER'の外での使用のためにそれを設定する方法がわかりません... – meyagen

答えて

1

理由は、sudoが環境変数を保持しないためです。 rbenvはユーザ環境を使用しているため、そのままでは動作しません。あなたはsudoとルビーを実行するには、このようなコマンドを使用することができます。

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

ユーザーの下unicornを実行したい場合は、あなたのアプリに一致するようにこれらを変更する必要がにあなたがrbenvがインストールされている:

!/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

関連する問題