2012-02-06 4 views
0

정의 된 :app 역할 내에서 실행해야하는 일부 카피 스트라노 작업을 빌드했습니다. 이것은 내가 지금까지 무엇을 가지고 :주어진 범위 내에서 Capistrano 작업이 수행되지 않습니다.

desc "Stop unicorn" 
task :stop, :roles => :app do 
    logger.info "Stopping unicorn server(s).." 
    run "touch #{unicorn_pid}" 
    pid = capture("cat #{unicorn_pid}").to_i 
    run "kill -s QUIT #{pid}" if pid > 0 
end 

는 지금까지 내가 아는 한,이, 오른쪽 :app 역할에 지정된 서버에서 주어진 명령을 실행해야합니까? 그러나 사실은 :db 역할의 서버에서 명령을 실행하고 있다는 것입니다.

누구든지이 문제에 대한 통찰력을 줄 수 있습니까? 아니면 카피스트라 노가 :roles 깃발을 쓰게 할 수있는 방법이 있습니까? 작업을하게됩니다 캡처를 사용하여 사전

// 에밀

+0

좀 더 조사해 보았습니다.이 작업을 수행 할 즈음에'servers' 배열은 모든 역할의 서버를 모두 포함합니다 (즉,'app', web'과'db')이 예상 된 동작입니까? –

+0

그리고 더. 캡처 명령이 모든 서버에서 실행 된 다음 모든 서버에서 kill 명령이 실행 된 것 같습니다. kill 명령이 모든 서버에서 마지막 서버의 ID를 삭제하려고 시도합니다. 서버 배열을 반복하기 전에 특정 서버에서 일련의 명령을 실행하고 싶은이 경우에 가장 적합한 방법이 있습니까? –

+0

환경 - 역할 설정은 어떻습니까? – phoet

답변

0

에서

감사 만 나열된 첫 번째 서버에서 실행합니다. 문서에서

는 :

캡처 도우미는 일치하는 첫 번째 서버에 지정된 명령을 실행하며, 문자열로 명령의 출력을 반환합니다.

https://github.com/capistrano/capistrano/wiki/2.x-DSL-Action-Inspection-Capture

불행하게도 나는 유사한 문제에 직면하고는 find_servers 솔루션이 작동하지만, N의 X의 N 시간을 해키, 그리고 실행되는 곳 N 당신이 가진 서버의 수입니다.

관련 문제