2012-04-09 3 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

여기에 몇 가지 문제가 있습니다. 첫째, 변수에 지정할 때 $을 사용하지 마십시오. 둘째, 변수를 셸에서 사용 중이므로 변수를 내보낼 필요가 없습니다. 실행되는 프로그램에 환경 변수로 전달되지 않습니다. 셋째, 셸은 작은 따옴표 안에있는 변수를 대체하지 않으므로 큰 따옴표로 전환해야합니다. 그런 다음 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