2012-04-09 14 views
0

ジョブキューにResqueを使用するRailsアプリケーションがあります。 Resqueワーカークラスは「JobDo」であると私はキューに仕事を置くスクリプト(jobdo.sh)持っているアプリ/労働者は/ job_do.rb環境変数を含むbashスクリプトのJRubyステートメント

である。しかし

jruby -e 'load "/home/abc/myapp/app/workers/job_do.rb"; Resque.enqueue(JobDo, Time.now.utc)' >> /home/abc/logs/resque.log 2>&1 

を..私は同じログファイル、ユーザー、またはレールアプリケーションルートを使用しないレール環境でこれを実行できるようにしたいと考えています。

export $USER_HOME=/home/abc 
export $LOGFILE=$USER_HOME/logs/resque.log 
export $SERVER_HOME=/home/abc/myapp 

jruby -e 'load "$SERVER_HOME/app/workers/job_do.rb"; Resque.enqueue(JobDo,Time.now.utc)' >> $LOGFILE 2>&1 

これは、任意のユーザ編集の$ USER_HOMEと$ SERVER_HOMEを聞かせて、その環境でコードを実行します:私はこのような何かを参照してください。

しかし、私は環境変数を使用するために一重引用符と二重引用符をひねる方法を理解できないため、これは機能しません。これはどうすればいいですか?これは、限り、変数のどれもが、スペースを含まないように動作するはずです

export USER_HOME=/home/abc 
export LOGFILE=$USER_HOME/logs/resque.log 
export SERVER_HOME=/home/abc/myapp 

jruby -e "load $SERVER_HOME/app/workers/job_do.rb; Resque.enqueue(JobDo,Time.now.utc)" >> $LOGFILE 2>&1 

答えて

0

は、私はあなたが二重引用符と単一引用符を置き換え、引用符の内側のセットを削除することができると思います。

1

ここにいくつかの問題があります。まず、変数に代入するときは、$を使用しないでください。第2に、シェルで使用されている変数をエクスポートする必要はありません。実行するプログラムに(環境変数として)渡されません。第3に、シェルは一重引用符内の変数を置き換えないので、二重引用符に切り替える必要があります(そして、jrubyに渡す二重引用符をエスケープする必要があります)。最後に、スペースやその他の面白い文字が含まれている場合に備えて、$USER_HOME$LOGFILEを二重引用符で囲みます。ここに私が得るものがあります:

USER_HOME=/home/abc 
LOGFILE="$USER_HOME/logs/resque.log" 
SERVER_HOME=/home/abc/myapp 

jruby -e "load \"$SERVER_HOME/app/workers/job_do.rb\"; Resque.enqueue(JobDo,Time.now.utc)" >> "$LOGFILE" 2>&1