在我的Capistrano 3部署中,我想设置set :deploy_to, -> { "/srv/www/#{fetch(:application)}" }
,以便:deploy_to
对于它部署的每个服务器都不同。
在我的staging.rb
文件中,我有:
server 'dev.myserver.com', user: 'deploy', roles: %w{web app db}, install_path: 'mycustom/path'
server 'dev.myserver2.com', user: 'deploy', roles: %w{web app db}, install_path: 'mycustom/other/path'
我的问题是:我可以在:deploy_to
中使用我定义的“install_path”吗?如果可能的话,你会怎么做?
答案 0 :(得分:3)
最后,在环顾四周后,我遇到了Capistrano的一位开发人员的问题,特别指出无法完成
来自Github issue:
的引用不可能,抱歉。 fetch()(广泛记载)读取值 由set()设置,使用set()和fetch()超过常规的唯一原因 ruby变量是在插件和插件之间提供一致的API 扩展,因为set()可以在以后解析Proc。
您通过服务器()在主机对象中设置的变量 命令属于单个主机,其中一些主机,用户,角色等 有特殊的意义。有关更多信息,请参阅 https://github.com/capistrano/sshkit/blob/master/EXAMPLES.md#do-something-different-on-one-host-or-another-depending-on-a-host-property
如果您特别需要部署到每个目录上的不同目录 机器你可能不应该使用内置任务(他们 不适合你的需要),而是从Gem复制deploy.rake 进入您自己的项目,并根据需要进行修改。在这种情况下 可能是不采取fetch(:deploy_to),而是从主机读取 属性。
在做任何依赖之前,你可以尝试做一些事情 在调用fetch(:deploy_to)时,使用from中的值设置() host.someproperty但是我很确定这会让人兴奋而精彩 有趣的方式。