2009-11-02 5 views
19

현재 여러 개의 부하가 분산 된 응용 프로그램 서버 (현재는 2 개이지만 시간이 지남에 따라 늘어남)가 포함 된 레일스 응용 프로그램을위한 새로운 프로덕션 환경을 설정 중입니다.Capistrano를 사용하여 여러 웹 서버에 레일스 응용 프로그램 배포

나는 기존의 단일 서버에 이미 사용하고있는 Capistrano를 사용하여 이러한 모든 서버에 단일 명령으로 응용 프로그램 배포를 처리하고 싶습니다. 내가 이것을 볼 수있는 유일한 방법은 각각의 응용 프로그램 서버 (app1, app2 등등)에 대해 새로운 '환경'을 정의하고 성능을 향상시키기 위해 capistrano-ext (실제로 테스트 및 준비 환경에 배포하는 데 사용)을 사용하는 것입니다.

cap app1 app2 app3 deploy 

권장되는 방법입니까, 아니면 더 나은 방법이 있습니까?

답변

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 "rake db:migrate", :roles => :db 

rake db : migrate는 db 서버에서만 실행됩니다.

+8

참고. 여러 응용 프로그램 서버는 다음과 같습니다. 역할 : app, "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에서 저에게 효과적이었습니다. –

관련 문제