2012-02-14 75 views
2

一些背景,我是capistrino运行2.9.0和capistrano-ext 1.2.1。多级部署按预期工作。正如将角色的服务器阵列添加到角色一样。Capistrano多个服务器:如何在部署期间引用当前服务器?

INSTANCES = ["this.server.com", "that.server.com"] 
role(:web) {INSTANCES} 

我一直在努力使:deploy_to生产基于服务器的名称的路径部署,就像这样:

set :deploy_to, lambda { "/var/www/application/$HOSTNAME" } 

这是相当不错的,除了this.server。 com和that.server.com实际上是相同的主机。在这个例子中,我没有使用两个基于我的deploy/stage.rb文件中定义的服务器名称的部署文件夹,而只是生成一个/var/www/application/server.com/

我一直在挖希望能够在capistrano级别注入这个方法,或者引用一个可以保留这些细节的shell变量。似乎需要托管一个具有多个应用程序实例的应用程序服务器将很常见。

我真正需要的是:

set :deploy_to, lambda { "/var/www/application/$SERVER_NAME_CAP_IS_USING" } 
+0

我不认为使用不同的用户名也可以在这里工作。 – domino 2012-02-14 00:09:24

回答

0

也许this帮助。你可以定义特定的ServerDefinition对象,并调用这些任务或任何:

set(:boss_host, { 
    Capistrano::ServerDefinition.new('boss.reservoir.dogs', { 
    :user => 'boss', 
    :port => 2222, 
    :ssh_options => { 
     :keys => './keys/boss.pem' 
    } 
}) 

run("date", :hosts => [ :boss_host ]