在我的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'我的问题是:是否可以在我的install_path中使用我定义的“:deploy_to”?如果有可能,你会怎么做?
发布于 2015-04-06 19:49:52
最后,在环顾四周之后,我遇到了一个来自Capistrano的开发人员的问题,具体地说,it 不能做
来自Github问题的报价
不可能抱歉。fetch() (如广泛记录的那样)读取set()设置的值,在常规的ruby变量上使用set()和fetch()的唯一原因是在插件和扩展之间提供一致的API,并且因为set()可以在以后解析一个Proc。 通过server()命令在主机对象中设置的变量属于单个主机,其中一些变量、用户、角色等具有特殊意义。有关更多信息,请参见https://github.com/capistrano/sshkit/blob/master/EXAMPLES.md#do-something-different-on-one-host-or-another-depending-on-a-host-property。 如果您特别需要部署到每台机器上的不同目录,您可能不应该使用内置任务(它们不符合您的需要),而是将deploy.rake从Gem复制到您自己的项目中,并根据需要对其进行修改。在这种情况下,可能不是提取(:deploy_to),而是从主机属性读取它。 您可以尝试在执行任何依赖于调用fetch(:deploy_to)的操作之前,使用来自host.someproperty的值来设置(),但我非常肯定这会以令人兴奋和有趣的方式中断。
https://stackoverflow.com/questions/29353019
复制相似问题