Capistrano多个服务器:如何在部署期间引用当前服务器?

时间:2012-02-14 00:07:53

标签: capistrano

一些背景,我是capistrino运行2.9.0和capistrano-ext 1.2.1。多阶段部署按预期工作。就像在角色中添加服务器阵列一样。

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" }

1 个答案:

答案 0 :(得分: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 ]