2014-12-24 38 views
2

我想部署我的应用程序使用capistrano。但我想如果在第一次运行我想将它部署到以下路径Capistrano部署到不同的路径在同一台服务器上

set :deploy_to, '/home/a/some_path/ 

一旦完成它应该为第二路径运行的第一个部署我的应用程序相同的服务器。例如多条路径是将

set :deploy_to, '/home/b/some_path/ 

等等。任何建议我怎么能做到这一点?现在我的单路径部署路径正在工作AOK。

+1

有2个文件,运行单独的cap命令 – Nithin

回答

2

在您的配置文件:

set :deploy_to, ENV["DEPLOY_PATH"] 

然后,部署,运行命令设置DEPLOY_PATH变量:

DEPLOY_PATH="my/path" cap production deploy 
+1

有什么方法可以直接在文件上设置路径而不是使用命令行? –

0

使用Capistrano的3.8.2,我monkeypatched的lib/Capistrano的/ DSL/path.rb在我的deploy.rb中,但后来我发现我需要更多的工作才能让git wrapper在不同的部署用户的情况下正确设置。 结果是:https://gist.github.com/mcr/49e8c7034658120013c1fe49da77c2ac

但是,我要离开这里的精华内容:

module Capistrano 
    module DSL 
    module Paths 
     def deploy_to 
     dir = @host.properties.fetch(:deploy_to) || fetch(:deploy_to) 
     puts "For #{@host.hostname} deploy_to: #{dir}" 
     dir 
     end 
    end 
    end 
end 

(你可以把放出来,它缩短到一衬,但我发现了额外的调试有用)

之一,那么做:

server "server.client1.example.com", user: "client1", roles: %w{app db web}, deploy_to: '/client1/app/foobar' 
server "server.client2.example.com", user: "client2", roles: %w{app db web}, deploy_to: '/client2/app/foobar' 

其中server.client1.example.com和server.client2.example.com是CNAME记录或重复的A/A同一台服务器的AAA记录。这也隔离了每个客户端到DNS的问题。

+0

尽管上述方法奏效,但最终证明它还不够充分,我已经分叉capistrano(和capistrano-bundler)试图彻底解决问题。 – mcr

相关问题