2012-05-14 2 views
4

capistrano로 play2 응용 프로그램을 배포하려고하는데 배포 성공 후 play2 응용 프로그램을 다시 시작하는 방법을 알 수 없습니다. 그냥 '게임 시작'을 트리거링capistrano를 사용하여 원격 컴퓨터에서 play2 응용 프로그램을 시작하는 방법

#!/bin/bash 

nohup bash -c "/var/lib/play2/play start &>> /tmp/myapp.log 2>&1" &> /dev/null & 

그것은 잘 작동 프로세스가 나를 CTRL + D

을 누를 때까지 내가 재생 응용 프로그램의 루트 폴더에 시작 스크립트를 만들었습니다 기다리고 매달려되게합니다 때를 이 서버에서 실행하십시오. 내가 로컬 컴퓨터에서 ssh를 통해 이것을 호출하려고 할 때도 작동한다. 그러나 카피 스트 라노를 사용하고있을 때는 아무 것도하지 않는 것 같습니다. 내 capistrano 설정은 다음과 같습니다 :

namespace :deploy do 

    task :restart do 
    stop 
    sleep 1 
    start 
    end 

    task :start do 
    run "cd #{current_release}/trip-api && ./start.sh" 
    end 

    task :stop do 
    run "cd #{current_release}/trip-api && ./stop.sh" 
    end 
end 

원격 컴퓨터에서 play2 응용 프로그램을 시작하는 가장 좋은 방법은 무엇입니까? 카피 스트라 노와 함께 일하는 방법?

답변

4

가입을 살펴에서을 가지고 좋은 생각이 deploying your application on production

에 대한 문서를 재생하십시오.

:

권장되는 방법은

play clean compile stage 

사용하여 응용 프로그램을 패키지 그리고

$ 목표와 실행/

그것을 중지하려면 시작, 워드 프로세서에서보고하는 것입니다

서버의 프로세스 ID가 부트 스트랩에 표시되고 RUNNING_PID 파일에 기록됩니다. 실행중인 Play 서버를 종료하려면 응용 프로그램을 올바르게 종료하는 프로세스에 SIGTERM을 보내면됩니다. 이 quickstart for Openshift에서

, 그것은 다른 start play as a service에 대한 방식과 stop it을 보여줍니다.

은 기본적으로는 다음과 같이 시작하는 수행

APP_COMMAND="${OPENSHIFT_REPO_DIR}target/start $PLAY_PARAMS "\ 
"-Dhttp.port=${OPENSHIFT_INTERNAL_PORT} "\ 
"-Dhttp.address=${OPENSHIFT_INTERNAL_IP} "\ 
"-Dconfig.resource=openshift.conf" 

echo $APP_COMMAND &>> $LOG_FILE 
nohup bash -c "${APP_COMMAND} &>> ${LOG_FILE} 2>&1" &> /dev/null & 

하고

pid=`cat RUNNING_PID` 
echo "Stopping play application" >> $LOG_FILE 
kill -SIGTERM $pid 
+0

설명해 주셔서 감사합니다. 그러나 문제는 해결되지 않습니다. 이것은 서버에서 로컬로 실행할 때 작동하지만 어떤 이유로 원격으로 트리거 할 수 없습니다. (예 : capistrano) –

+0

제안에 따라 작업했습니다 (https://gist.github.com/2769718 참조). 이 솔루션은 capistrano의 기본 리비전 + 심볼릭 링크 (현재) 디렉토리 구조를 사용하지 않았습니다. RUNNING_PID 파일이 이전 하위 디렉토리에 남아 있기 때문에 스크립트가 더 이상 앱을 중지 할 수 없기 때문입니다. 재생 응용 프로그램을 배포하는 가장 좋은 방법이라고 생각하기 때문에 대답으로 표시하겠습니다. –

1

내가 runit을 사용하는 것이 좋습니다 것입니다 중지합니다. 우리는 현재 많은 양의 서비스를 생산 중이며 잘 작동합니다.

run이라는 간단한 쉘 스크립트 만 만들고 runit을 포함하는 디렉토리를 가리킨 다음 시작합니다. 서비스는 스스로를 daemonize하거나 pid 파일을 제어해야합니다.

서비스를 시작, 중지 및 쿼리하는 명령이 있습니다 (sv).(sv start|stop|status|restart yourapp).

카피스토라노를 전혀 사용하지 않지만 소용이없는 구글 검색은 저에게이 http://rubygems.org/gems/capistrano-runit을주었습니다. 유용성을 보장 할 수는 없습니다. 그냥 apt-get install runit하고 갈 수 있습니다 http://smarden.org/runit/faq.html 데비안에서

:

http://smarden.org/runit/

FAQ를 시작하는 가장 좋은 장소입니다. update-service --add /your/service/dir/은 runit으로 서비스를 등록합니다.

배포시 서비스가 중단되고 바이너리가 변경되고 서비스가 시작됩니다. 정말 간단합니다.

+0

소리는 실행 가능한 솔루션처럼 들리지만 내 질문은 게임 응용 프로그램에 특히 중요합니다. 내가 똥 벌레와 함께 일할 수 있다면 해보겠습니다. –

+0

모든 종류의 응용 프로그램에서 작동합니다. 성공적이라면 경험을 게시하십시오. – fedesilva

관련 문제