2012-02-14 5 views
2

いくつかの背景、私はcapistrino 2.9.0とcapistrano-ext 1.2.1を実行しています。マルチステージ展開は期待通りに機能しています。同様に、役割のサーバーの配列を追加しています。Capistrano複数サーバー:展開中に現在のサーバーを参照する方法

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

私が作るしようとしてきた:

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

これはthis.server除いて、かなりうまく機能している:deploy_toはそうのように、展開されているサーバーの名前に基づいてパスを生成します。 comとthat.server.comは実際には同じホストです。この例では、私のdeploy/stage.rbファイルに定義されたサーバ名に基づいて2つのdeployフォルダを用意するのではなく、/var/www/application/server.com/を作成します。

私は掘りましたcapistranoレベルでこれを注入する方法や、これらの詳細を保持するシェル変数を参照する方法を探しています。アプリケーションの複数のインスタンスを持つアプリケーションサーバーをホストする必要があるように思えます。私は本当に必要なもの

は次のとおりです。

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

ここでは、別のユーザー名を使用しても問題はありません。 – domino

答えて

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 ] 
関連する問題