4

我听说 Capistrano 支持部署到多个服务器,但我还没有找到一种实用的设置方法。当我说多台服务器时,我的意思是在生产环境中运行相同应用程序的服务器。如果这是我目前使用的,我随时都想部署到 5 或 10 台服务器。

谢谢你。

4

2 回答 2

9

使用多台服务器是使用 capistrano 而不是手工操作的主要原因之一。

您的 deploy.rb 只需要定义应该在哪些服务器上执行哪些操作,这是通过设置哪些服务器属于哪些角色来完成的。您可以创建自己的角色,但内置 capistrano 配方要求您定义 3 个角色:

  • app:你的应用程序代码运行的地方
  • web:网络前端
  • db:运行迁移的位置

这 3 个同义词并不少见:如果您有一堆相同的服务器都运行 apache + 乘客,那么它们都是应用程序和 Web 服务器。其中之一需要被赋予 db 角色。

您在 deploy.rb 文件中定义角色。在最简单的情况下,这只是一个 IP 地址或主机名列表:

role :app, [192.168.1.1,192.168.1.2]

它也可以是一个块。例如,在部署到 ec2 时,您可能会插入一个 api 调用来检索要部署到的服务器列表。我通常通过为服务器分配标签来做到这一点,在这种情况下你可能有

role :app do
  ec2.instances.tagged('app').map(&:ip_address)
end

将该角色映射到带有 app 标签的 ec2 实例(capistrano 缓存此信息并且只会执行一次您的块)

于 2012-07-21T18:38:12.747 回答
0

我不得不对 Rails 4 使用不同的语法。

role :app, %w{s01.app.com s02.app.com}
role :web, %w{s01.web.com s02.web.com}
于 2016-05-27T17:05:07.473 回答