2009-11-02 47 views
19

我目前正在建立一个新的生产环境的Rails应用程序,其中包括多个负载平衡的应用服务器(目前只有两家,但这会随着时间而增加)。使用Capistrano的部署Rails应用程序中多个Web服务器

我想处理应用程序的部署使用Capistrano的(我已经用我的存在,单台服务器)在一个命令所有这些服务器。我可以看到这样做的唯一方法是使用capistrano-ext(我其实已经使用部署到我的测试和试运行环境),通过定义一个新的“环境”为每个应用服务器(app1app2等)和执行使用类似的部署:

cap app1 app2 app3 deploy 

这是推荐的方法,或者有更好的方法吗?

回答

9

呀。 Capistrano原生管理多台服务器。没有必要为卡皮斯特拉诺分机。
你只需要定义多个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将仅在db服务器上运行。

+8

注意上面的配置。多个应用程序服务器看起来像: 角色:应用程序,“app1.example.com”,“app2.example.com”,“app3.example.com” – scottd

+3

这不是基于问题的正确答案问 – Rob

36

假设capistrano multistage

config/deploy/production

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

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

+0

做什么我这样做,如果我想要使用生产环境的多台服务器,但仍然能够部署到一台特定的服务器?考虑你的例子:只需部署到“server1”,但只有production.rb,这可能吗? – farukg

2

这是我在rails 4曾尝试:

配置/ deploy.rb:

role :app, %w{server1 server2 server3} 
+0

这对Rails 4有效。 –

相关问题