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

时间:2009-11-02 15:15:17

标签: ruby-on-rails deployment capistrano

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

我想使用Capistrano(我已经用于现有的单一服务器)在单个命令中处理应用程序到所有这些服务器的部署。我能看到这样做的唯一方法是使用capistrano-ext(我实际上已经用它来部署到我的测试和登台环境),为每个应用服务器定义一个新的“环境”(app1app2等等,并使用以下内容执行部署:

cap app1 app2 app3 deploy

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

3 个答案:

答案 0 :(得分:36)

假设capistrano multistage

config/deploy/production

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

现在cap deploy production将部署到所有3台服务器。

答案 1 :(得分:9)

呀。 Capistrano本地管理多个服务器。不需要capistrano ext。
您只需要定义多个roles

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

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

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

此处,任务仅在app和db角色上执行。

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

run "rake db:migrate", :roles => :db

rake db:migrate将仅在数据库服务器上运行。

答案 2 :(得分:2)

这是我在rails 4中尝试过的:

<强>配置/ deploy.rb:

role :app, %w{server1 server2 server3}