0

ジョブ キューに Resque を使用する Rails アプリケーションがあります。Resque ワーカー クラスは「JobDo」で、app/workers/job_do.rb にあります。

ジョブをキューに入れるスクリプト (jobdo.sh) があります。

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 を編集し、その環境でコードを実行できるようになります。

ただし、一重引用符と二重引用符をいじって環境変数を使用する方法がわからないため、これは機能しません。どうすればいいですか?

4

2 に答える 2

1

ここにはいくつかの問題があります。まず、変数に代入するときは、. を使用しないでください$。次に、変数はシェルで使用され、実行するプログラムに (環境変数として) 渡されないため、エクスポートする必要はありません。第 3 に、シェルは単一引用符内の変数を置き換えないため、二重引用符に切り替える必要があります (その後、jruby に渡したい二重引用符をエスケープします)。最後に、スペースやその他の変な文字が含まれている場合に備えて、$USER_HOMEandを二重引用符で囲みます。$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
于 2012-04-09T23:42:55.263 に答える
0

一重引用符を二重引用符に置き換え、内側の引用符を削除できると思います。

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

これは、変数にスペースが含まれていない限り機能します。

于 2012-04-09T23:09:02.793 に答える