我听说 Capistrano 支持部署到多个服务器,但我还没有找到一种实用的设置方法。当我说多台服务器时,我的意思是在生产环境中运行相同应用程序的服务器。如果这是我目前使用的,我随时都想部署到 5 或 10 台服务器。
谢谢你。
我听说 Capistrano 支持部署到多个服务器,但我还没有找到一种实用的设置方法。当我说多台服务器时,我的意思是在生产环境中运行相同应用程序的服务器。如果这是我目前使用的,我随时都想部署到 5 或 10 台服务器。
谢谢你。
使用多台服务器是使用 capistrano 而不是手工操作的主要原因之一。
您的 deploy.rb 只需要定义应该在哪些服务器上执行哪些操作,这是通过设置哪些服务器属于哪些角色来完成的。您可以创建自己的角色,但内置 capistrano 配方要求您定义 3 个角色:
这 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 缓存此信息并且只会执行一次您的块)
我不得不对 Rails 4 使用不同的语法。
role :app, %w{s01.app.com s02.app.com}
role :web, %w{s01.web.com s02.web.com}