使用Capistrano将Rails应用程序部署到多个Web服务器

19

我目前正在为一个Rails应用设置新的生产环境,其中包括多个负载均衡的应用服务器(目前只有两个,但这将随着时间的推移而增加)。

我想使用Capistrano(我已经在现有的单个服务器上使用它)通过单个命令处理将应用程序部署到所有这些服务器。我能想到的唯一方法是使用capistrano-ext(我实际上已经使用它来部署我的测试和staging环境),通过为每个应用服务器定义一个新的'environment'(例如:app1, app2等),然后执行部署操作,例如:

cap app1 app2 app3 deploy

这是推荐的方法吗?还是有更好的方法?

3个回答

36

假设使用 Capistrano 多阶段部署

config/deploy/production 目录下:

role :app, "server1", "server2", "server3"

现在执行cap deploy production将会部署到所有三台服务器。


如果我想在生产环境下使用多台服务器,并且仍然能够部署到一个特定的服务器,该怎么办?以你提供的例子为基础:只部署到“server1”,但只有一个production.rb文件,这可能吗? - farukg

9

是的,Capistrano可以原生地管理多个服务器,无需使用capistrano ext。
你只需要定义多个角色

role :app, "myserver.example.com"
role :db,  "mysecondserver.example.com"

默认情况下,您的任务将在每个服务器上执行。但是,您可以将任务限制为仅在一个或多个服务器上执行。

task :migrate, :roles => [:app, :db] do
    # ...
end

这里,任务仅在应用程序和数据库角色上执行。

您可以使用run方法执行相同操作。

run "rake db:migrate", :roles => :db
rake db:migrate 只会在数据库服务器上运行。

8
以上配置说明:如果有多个应用服务器,配置将类似于: role :app, "app1.example.com", "app2.example.com", "app3.example.com"。 - scottd

2
这是我在rails 4中尝试过的方法:
config/deploy.rb文件内容如下:
role :app, %w{server1 server2 server3}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接