【问题标题】:Deploy to only one role / server with capistrano使用 capistrano 仅部署到一个角色/服务器
【发布时间】:2011-01-07 01:26:10
【问题描述】:

我正在尝试设置多个角色,一个用于直播,另一个用于开发。它们看起来像这样:

role :live, "example.com"
role :dev, "dev.example.com"

但是,当我运行 cap deploy 时,它对两台服务器都执行。我已经尝试了以下方法,它总是在两者上执行。

cap deploy live
cap ROLE=live deploy

我错过了什么?我知道我可以编写一个只响应一个角色的自定义任务,但我不想写一大堆任务只是为了告诉它响应一个角色或另一个角色。谢谢!

【问题讨论】:

标签: ruby capistrano


【解决方案1】:

试试 capistrano 多级:

http://weblog.jamisbuck.org/2007/7/23/capistrano-multistage

角色的目的是在不同的服务器上部署不同的段,而不是将整个平台部署到一组服务器上。

【讨论】:

    【解决方案2】:

    你可以这样做:

    task :dev do
        role :env, "dev.example.com"
    end
    
    task :prod do
        role :env, "example.com"
    end
    

    然后使用:

    cap dev deploy
    cap prod deploy
    

    【讨论】:

      【解决方案3】:

      Capistrano Multistage 绝对是您发布的用于部署到环境的示例的解决方案。关于部署到角色或服务器的问题,Capistrano 也为此提供了命令行解决方案。

      部署到单个角色(注意 ROLES 是复数):

      cap ROLES=web deploy
      

      部署到多个角色:

      cap ROLES=app,web deploy
      

      部署到特定服务器(注意 HOSTS 是复数):

      cap HOSTS=web1.myserver.com deploy
      

      部署到多台服务器:

      cap HOSTS=web1.myserver.com,web2.myserver.com deploy
      

      要部署到具有角色的服务器:

      cap HOSTS=web1.myserver.com ROLES=db deploy
      

      【讨论】:

        【解决方案4】:

        还有一个提示:如果您使用多阶段,请记住将 ROLES 常量放在 cap 命令之前。

        ROLES=web cap production deploy
        

        或在环境之后

        cap production ROLES=web deploy
        

        如果你把它作为第一个参数,multistage会将它作为舞台名称并替换为默认的:

        cap ROLES=web production deploy
        
        * [...] executing `dev'
        * [...] executing `production'
        

        【讨论】:

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