2009-11-02 80 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有效。 –

相關問題