Capistrano: метод fetch не возвращает значение в начале deploy.rb

Я новичок в 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.

Каково было бы решение установить динамические переменные, используя ввод пользователя?

Спасибо.

1

Решение

Чтобы динамически установить переменную, вам нужно использовать -> { ... } синтаксис. Это откладывает оценку кода в скобках, пока вы не соберете пользовательский ввод.

Кроме того, в Ruby для интерполяции строк необходимо использовать двойные кавычки, а не одинарные.

Чтобы вы могли написать:

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

Я также добавил скобки для ясности (они не являются обязательными).

Наконец, более краткий синтаксис для получения пользовательского ввода заключается в простом ask, Призыв к set избыточно Другими словами, я рекомендую:

ask :client, "demo"

Это побудит пользователя предоставить значение для :client переменная, с demo быть по умолчанию.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector