2

提供されている init.d スクリプト ( sidekiq github repoの init.d スクリプト) を使用していますが、システム全体に RVM がインストールされた ubuntu システムを使用しています。

ログに不平がなく、実際には何も開始されずに、アプリディレクトリに移動してコマンドを発行する方法を理解できないようです。

質問: RVM を使用している場合、init.d スクリプトで sidekiq の起動コマンドをどのように記述すればよいですか? 私のユーザーはubuntuという名前です。現在、init.dスクリプトにこれがあります:

START_CMD="$BUNDLE exec $SIDEKIQ" 
# where bundle is /usr/local/rvm/gems/ruby-1.9.3-p385/bin/bundle
# and sidekiq is sidekiq
# I've also tried with the following args: -e $APP_ENV -P $PID_FILE -C $APP_CONFIG/sidekiq.yml -d -L $LOG_FILE"
RETVAL=0


start() {

  status
  if [ $? -eq 1 ]; then

[ `id -u` == '0' ] || (echo "$SIDEKIQ runs as root only .."; exit 5)
[ -d $APP_DIR ] || (echo "$APP_DIR not found!.. Exiting"; exit 6)
cd $APP_DIR
echo "Starting $SIDEKIQ message processor .. "
echo "in dir `pwd`"
su - ubuntu -c "$START_CMD >> $LOG_FILE 2>&1 &"
RETVAL=$?
#Sleeping for 8 seconds for process to be precisely visible in process table - See status ()
sleep 8
[ $RETVAL -eq 0 ] && touch $LOCK_FILE
return $RETVAL
  else
    echo "$SIDEKIQ message processor is already running .. "
  fi


}

私の sidekiq.log には、次のエラーが表示されますCould not locate Gemfile。ただし、作業ディレクトリを出力すると、このコマンドが実行された時点で、echo pwd によると、間違いなくアプリの現在のディレクトリにいます。

su - ubuntu -c [ここにコマンド] を実行すると、次のエラーが表示されます。

/usr/bin/env: ruby_noexec_wrapper: No such file or directory

私の解決策は、プロセスを手動で開始することです。手動で app ディレクトリに cd し、次のコマンドを発行すると:

bundle exec sidekiq -d -L log/sidekiq.log -P tmp/pids/sidekiq.pid

物事は計画通りに進み、その後

sudo /etc/init.d/sidekiq status

物事が順調に進んでいることを教えてくれます。

また、sudo /etc/init.d/sidekiq stop および status は期待どおりに機能します。

4

2 に答える 2

3

Sidekiq の init.d スクリプトを書いた経験について数か月前にブログ記事を書きましたが、RVM ではなく rbenv を使用していました。

https://cdyer.co.uk/blog/init-script-for-sidekiq-with-rbenv/

ユーザー名とアプリのディレクトリ変数を変更することを除いて、ほぼ同じものを使用できるはずです。

于 2013-08-15T20:30:14.360 に答える
2

ラッパーを使用します。

BUNDLER=/usr/local/rvm/wrappers/ruby-1.9.3-p385/bundle

バンドラー ラッパーが利用できない場合は、次のように生成します。

rvm wrapper ruby-1.9.3-p385 --no-links bundle # OR:
rvm wrapper ruby-1.9.3-p385 --no-links --all

エイリアスを使用して簡単にすることができます。

rvm alias create my_app 1.9.3-p385

そして、次のように使用します。

BUNDLER=/usr/local/rvm/wrappers/my_app/bundle

この方法では、アプリケーションの ruby​​ が変更されたときにスクリプトを変更する必要はありません。エイリアスを更新するだけで、rvm-capistrano に適切な説明/統合があります => https://github.com/wayneeseguin/rvm-capistrano/# create-application-alias-and-wrappers

于 2013-08-03T23:52:00.850 に答える