2012-02-14 73 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 ]