2014-03-13 8 views
2

/home/myuser/watchDir/myapp에 레일스 응용 프로그램이 있고 수정을 위해 ../watchDir을보기 위해 설정되어있는 incron 작업이 있습니다. 일단 트리거되면 incron은 /usr/local/bin/myscript.sh 스크립트를 실행합니다. 이것은 내가 스크립트를 실행하기 위해 얻을 수있는 유일한 장소입니다. 해당 스크립트에서 rakebundle 명령을 내 루트 응용 프로그램에서 실행하도록 호출했습니다. I 스크립트가 실행 중입니다 (테스트가 있습니다). bundlerake 명령은 모두 자동으로 실패합니다. 나는 리눅스에 상당히 익숙하지 않고 인터넷 연구는 몇 가지 해결책을 제시해 주었다. 내 스크립트에는 절대적인 경로가 있습니다. bash_profile을 scripts/incron 명령에 추가하려고했습니다. 내가 incron 스크립트 내 홈 디렉토리에있는 다른 스크립트를 실행하는 데 시도했다. 모든 스크립트는 실행 가능합니다. bundle--gemfile 옵션을 사용해 보았습니다.하지만 wokr는 아닙니다. 아무도 내가 여기서해야 할 일을 알고 있니? 기본적으로 RAILS_ROOT 외부에서 bundlerake 명령을 실행하고 싶습니다. 나는 또한 incron이 레일 명령의 사용을 복잡하게하는지 알고 싶다. 감사.rake 외부에서 rake 실행/Incron은 레일에 대해 rake 또는 bundle 명령을 실행하지 않습니다.

편집 :

다음

있는 관련 파일 :

Incrontab : 나는이 시도

/home/myuser/watchDir/ IN_MODIFY,IN_CLOSE_WRITE,IN_CLOSE_NOWRITE /bin/bash /usr/local/bin/runT.sh [email protected]/$# 

: 여기

/home/myuser/watchDir/ IN_MODIFY,IN_CLOSE,IN_CLOSE_WRITE,IN_CLOSE_NOWRITE source '/home/myuser/.bash_profile && /bin/sh /usr/local/bin/runT.sh' [email protected]/$# 

을 그리고 그것을 부르고 스크립트입니다 :

#!/bin/bash 
mkdir /home/myuser/worked #This is to ensure that that incron is running and executing this script 
cd /home/myuser/watchDir/myapp 
/home/myuser/.rvm/gems/ruby-1.9.3-p545/bin/bundle install --gemfile /home/myuser/watchDir/myApp/Gemfile 
/home/myuser/.rvm/gems/ruby-1.9.3-p545/bin/rake -f /home/myUser/watchDir/myApp 

내 .bash_profile에 파일을

/home/myuser/watchDir/ IN_MODIFY,IN_CLOSE_WRITE,IN_CLOSE_NOWRITE /bin/bash /usr/local/bin/runT.sh [email protected]/$# 

하고 스크립트가로 :

# .bash_profile 

# Get the aliases and functions 
if [ -f ~/.bashrc ]; then 
     . ~/.bashrc 
fi 

# User specific environment and startup programs 

PATH=$PATH:$HOME/bin 

export PATH 

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM into a shell session *as a function* 
source ~/.profile 
+0

귀하의 incron 스크립트의 내용을 게시하는 것이 도움이 될 수 있습니다. 당신의 스크립트가 없다면 추측하고 싶지만'rake'와'bundle' 명령을 실행하고있는 스크립트 상단에'cd/path/to/approot'를 추가 할 수 있습니까? – Beel

+0

@Beel Yea 나는 그것을 시험해 보았다. 나는 스크립트를 게시 할 것이다. – user3195786

+0

incron에 관한 까다로운 점은 (당신이 발견 한 것처럼 보인다) 스크립트가 깨끗한 환경에서 실행된다는 것이다. 따라서 환경을 구축해야합니다. 두 번째 예제는 사용자 테스터의 .bash_profile을 소싱하여이 작업을 시도합니다. 이를 수행해야하지만, 사용자 myuser에 대해이를 수행해야합니다. 그것이 당신이하고있는 일인가요? incron 어딘가에 로그인해야합니다 - 로그에 아무것도 있는지? 또한 RVM을 사용하고 있기 때문에 원본 bash_profile은 rvm setup 스크립트를 소스로 사용해야합니다. 미안 해요, 오늘 맥에 있지 않아서 정확한 설정을 테스트 할 수는 없지만 HTH. – Beel

답변

1

가 ... 내 마지막 의견을 요약하여 icrontab 항목을 변경하려면 할 수

#!/bin/bash 
source /home/myuser/.bash_profile 
mkdir /home/myuser/worked #This is to ensure that that incron is running and executing this script 
cd /home/myuser/watchDir/myapp 
/home/myuser/.rvm/gems/ruby-1.9.3-p545/bin/bundle install --gemfile /home/myuser/watchDir/myApp/Gemfile 
#/home/myuser/.rvm/gems/ruby-1.9.3-p545/bin/rake -f /home/myUser/watchDir/myApp 
+0

그게 효과가있는 것 같습니다. 놀랄 만한. 고마워요, 저는 소싱으로 아직도 조금 신비스럽지 만, 약간의 독서로 그것을 처리해야합니다. 나는 번들이 작동하고 있음을 확인할 수 있기 때문에 "닮은 모양"이라고 말했지만 레이크 작업이 실행되었는지 알아 내려고합니다. 어느 쪽이든, 이것은 incron으로 rake/bundle 명령을 찾는 문제를 해결 한 것 같습니다. 다시 한번 감사드립니다. – user3195786

+0

쿨! 소스는 "여기에 입력 된 것처럼이 파일에서 명령을 실행"하는 것을 의미합니다. 그것은 일부 프로그래밍 언어에서 "include"와 비슷합니다. 대신 스크립트를 "실행"하면 명령이 하위 프로세스에서 실행됩니다.이 프로세스는 호출 스크립트에서 환경 변수 설정을 볼 수 없기 때문에 원하는 것이 아닙니다. – Beel

+0

또한 rake 명령은 스크립트에서 주석 처리됩니다. 실행하려면 #을 제거해야합니다. – Beel