2011-02-14 5 views
4

프로덕션 로그를 로컬 컴퓨터에 다운로드하는이 작업이 있습니다. 하나의 시스템을 실행 중이면 여러 가지 파일을 덮어 쓰게됩니다.Capistrano - 컴퓨터 이름

namespace :log do 
    desc "Get production log files" 
    task :get_prod, :roles => :app do 
    download("/home/user/myapp/shared/log/production.log", "log/production.log") 
    end 
end 

고유 한 파일 이름에 일종의 식별자를 추가하고 싶습니다. 사용하는 것이 확실하지 않습니다. 사용할 수있는 카피 스트라 노 변수가 있습니까?

답변

4

예 사용할 수있는 특수 변수가 있습니다. 이 변수 ("$ CAPISTRANO : HOST $")는 대상 파일의 이름에 있어야합니다. Capistrano는 현재 파일을 전송하는 호스트 이름으로이를 보간합니다. *

코드는 다음과 지금 보일 것이다 :

namespace :log do 
    desc "Get production log files" 
    task :get_prod, :roles => :app do 
    download("#{shared_path}/log/production.log", "log/production.$CAPISTRANO:HOST$.log") 
    end 
end 

나는 또한 코드를 더 건조하게 변수 shared_path를 사용하는 것을 참조하십시오. 한 곳에서 구성을 유지하는 것이 좋습니다.


* 문자열 보간을위한 소스 코드는 (카피 스트라 노 2.5.19에서) lib 디렉토리/카피 스트라 노/transfer.rb 라인 (194)에 있습니다

... 
def normalize(argument, session) 
    if argument.is_a?(String) 
    argument.gsub(/\$CAPISTRANO:HOST\$/, session.xserver.host) 
    elsif argument.respond_to?(:read) 
... 

일반적인 조언 : 당신이하려고하면 인터넷에서 처음으로 뭔가를 발견하고 거기에서 그것을 꽤 빨리 발견하지 못하면 소스 코드를 봅니다 (물지 않고 작업하는 도구의 작동 방식을 알 수 있습니다).

+0

@ shared_path 리팩터링 제안에 대한 deploy_to/shared에 대한 감사의 전 감사의 말 –