【问题标题】:Capistrano Multiple Servers: How to refer to current server during deploy?Capistrano 多台服务器:如何在部署期间引用当前服务器?
【发布时间】:2012-02-14 00:07:52
【问题描述】:

一些背景知识,我是运行 2.9.0 和 capistrano-ext 1.2.1 的 capistrino。多阶段部署按预期工作。就像向角色添加服务器数组一样。

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

【问题讨论】:

  • 我认为在这里使用不同的用户名也行不通。

标签: capistrano


【解决方案1】:

也许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 ]

【讨论】:

    猜你喜欢
    • 2014-05-26
    • 2012-06-18
    • 2017-12-27
    • 1970-01-01
    • 2012-07-20
    • 1970-01-01
    • 2012-07-09
    • 1970-01-01
    • 2011-08-26
    相关资源
    最近更新 更多