【问题标题】:What's the difference between Capistrano 'stages' and 'roles'Capistrano“阶段”和“角色”有什么区别
【发布时间】:2013-09-19 06:33:42
【问题描述】:
这是我在网上找到的一些报价:
阶段:
来自 Beanstalk 博客
"允许您设置一个配方以将您的代码部署到多个
位置。”
来自 Github
“我们有一个生产服务器和一个登台服务器。所以很自然,我们
想要两个部署阶段,生产和登台。我们也
假设您正在从头开始创建应用程序。”
角色:
来自 SO(已接受的答案)
角色允许您编写仅适用于某些特定角色的 capistrano 任务
服务器。这实际上只适用于多服务器部署。这
“app”、“web”和“db”的默认角色也在内部使用,所以
他们的存在不是可选的(AFAIK)
在我的天真中,这些听起来像是一回事,有人可以用你祖母能理解的方式解释一下不同之处吗?
P.S 如果有帮助,我正在部署 PHP。
【问题讨论】:
标签:
deployment
capistrano
【解决方案1】:
阶段用于将不同的分支部署到不同的服务器组(其中一个组可能是一个或多个服务器)。
角色用于将同一分支部署到同一组中的不同服务器,并允许您在该组中的某些服务器上运行某些 capistrano 命令。例如,如果您在部署期间运行数据库更新任务,您可以指定仅为:db 角色运行它,其中:db 表示单个服务器,而不是浪费资源在两台服务器上运行相同的命令结果。
这仅在服务器组中有多个服务器时才真正有用(例如,staging1 和 staging2、prod1 和 prod2)。如果您有用于登台和生产的单台服务器,则无需担心角色。
请注意,我在这里还简化了阶段的定义。如果需要,您实际上可以将多个阶段部署到单个服务器,方法是使 :deploy_to 依赖于阶段。