2017-10-26 1 views
1

저는 Capistrano를 처음 사용합니다.Capistrano : fetch 메소드가 deploy.rb 시작 부분에 값을 반환하지 않습니다.

기본적으로 deploy_to 경로에서 사용자로부터받은 클라이언트 이름을 사용하고 싶습니다.

set :client, ask('client name','demo') 
    fetch :client` 

은 그럼 값을가 해결되지 않는

Unfortunatelly
set :deploy_to, '/php/ca/stg/#{fetch :client}/#{fetch :application}' 
    set :shared_directory, '/php/ca/stg/#{fetch :client}/shared' 

가져 오기로 deploy_to 설정합니다. 경로에 # {fetch : client} 같이 머물러 있습니다.

그러나 작업이 완벽하게 해결됩니다. 예 :

before :starting, :check_branch do 
     run_locally do 
     unless execute :git, 'ls-remote --exit-code', fetch(:repo_url), fetch(:branch), { raise_on_non_zero_exit: false } 
      fatal "Specified branch or tag #{fetch(:branch)} for client #{fetch(:client)} does not exist in remote repository." 
      exit 1 
     end 
     end 
    end 

내가 누락되었거나이 방법의 작동 방식을 이해하지 못합니다. 내가 말했듯이 저는 카피스트라노로 시작했습니다. 내 Laravel 응용 프로그램을 배포하는 데 사용하려고합니다.

사용자의 입력을 사용하여 동적 변수를 설정하는 해결책은 무엇입니까?

감사합니다.

답변

0

동적으로 변수를 설정하려면 -> { ... } 구문을 사용해야합니다. 이렇게하면 사용자 입력을 수집 할 때까지 대괄호 사이의 코드 평가가 지연됩니다.

또한 Ruby에서 문자열 보간을하려면 작은 따옴표가 아닌 큰 따옴표를 사용해야합니다.

그래서 당신이 쓸 수 : 나는 또한 명확성을 위해 괄호를 추가

set :deploy_to, -> { "/php/ca/stg/#{fetch(:client)}/#{fetch(:application)}" } 

(그들은 선택 사항입니다).

마지막으로 사용자 입력을 얻기위한보다 간결한 구문은 간단히 ask입니다. set에 대한 전화는 중복됩니다. 즉, 내가 추천 :

ask :client, "demo" 

이것은 demo 기본 인과 함께 :client 변수에 대한 값을 제공하라는 메시지가 표시됩니다.

+0

매트 감사합니다. 스크립트가 더 이상 실행되고 "요청"을 기다리지 않는다는 것을 알지 못했습니다. Deffered 참조가 잘 작동했습니다. –

관련 문제