Я новичок в Capistrano.
В основном я хочу использовать имя клиента, полученное от пользователя в пути deploy_to.
set :client, ask('client name','demo')
fetch :client`
Затем я установил deploy_to как
set :deploy_to, '/php/ca/stg/#{fetch :client}/#{fetch :application}'
set :shared_directory, '/php/ca/stg/#{fetch :client}/shared'
К сожалению, выборка не разрешает значение. Это остается как # {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
Я думаю, что я что-то упустил или я не понимаю, как работает этот метод. Как я уже сказал, я только начал с Capistrano. Я пытаюсь использовать его для развертывания моих приложений Laravel.
Каково было бы решение установить динамические переменные, используя ввод пользователя?
Спасибо.
Чтобы динамически установить переменную, вам нужно использовать -> { ... }
синтаксис. Это откладывает оценку кода в скобках, пока вы не соберете пользовательский ввод.
Кроме того, в Ruby для интерполяции строк необходимо использовать двойные кавычки, а не одинарные.
Чтобы вы могли написать:
set :deploy_to, -> { "/php/ca/stg/#{fetch(:client)}/#{fetch(:application)}" }
Я также добавил скобки для ясности (они не являются обязательными).
Наконец, более краткий синтаксис для получения пользовательского ввода заключается в простом ask
, Призыв к set
избыточно Другими словами, я рекомендую:
ask :client, "demo"
Это побудит пользователя предоставить значение для :client
переменная, с demo
быть по умолчанию.
Других решений пока нет …