我是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无法解析值。它在路径中就像#{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应用程序。
使用用户输入设置动态变量的解决方案是什么?
谢谢。
答案 0 :(得分:0)
要动态设置变量,您需要使用-> { ... }
语法。这会延迟括号之间的代码评估,直到您收集了用户输入。
另外,在Ruby中要进行字符串插值,你必须使用双引号,而不是单引号。
所以你可以写:
set :deploy_to, -> { "/php/ca/stg/#{fetch(:client)}/#{fetch(:application)}" }
为了清晰起见,我还添加了括号(它们是可选的)。
最后,获得用户输入的更简洁的语法只是ask
。对set
的调用是多余的。换句话说,我建议:
ask :client, "demo"
这会提示用户提供:client
变量的值,demo
为默认值。