2009-11-02 40 views
19

Tôi hiện đang thiết lập môi trường sản xuất mới cho ứng dụng Rails bao gồm nhiều máy chủ ứng dụng cân bằng tải (hiện chỉ có hai, nhưng điều này sẽ tăng theo thời gian).Sử dụng Capistrano để triển khai ứng dụng Rails cho nhiều máy chủ web

Tôi muốn xử lý việc triển khai ứng dụng cho tất cả các máy chủ này trong một lệnh bằng Capistrano (mà tôi đã sử dụng cho máy chủ đơn, hiện tại của mình). Cách duy nhất tôi có thể thấy khi làm điều này là sử dụng capistrano-ext (mà tôi thực sự đã sử dụng để triển khai cho môi trường thử nghiệm và dàn dựng), bằng cách xác định 'môi trường' mới cho mỗi máy chủ ứng dụng (app1, app2 và vv) và thực hiện triển khai bằng cách sử dụng một cái gì đó như:

cap app1 app2 app3 deploy 

Đây có phải là cách được khuyến nghị thực hiện hoặc có cách tiếp cận tốt hơn không?

Trả lời

9

Vâng. Capistrano quản lý nhiều máy chủ nguyên bản. Không cần thiết cho capistrano ext.
Bạn chỉ cần xác định nhiều roles

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

Theo mặc định nhiệm vụ của bạn sẽ được thực hiện trên tất cả các máy chủ. Nhưng bạn có thể giới hạn tác vụ chỉ với một hoặc một số máy chủ.

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

Ở đây, tác vụ sẽ chỉ được thực thi trên vai trò ứng dụng và db.

Bạn có thể làm tương tự với phương thức chạy.

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

Thoát ra db: di chuyển sẽ chỉ chạy trên máy chủ db.

+8

Lưu ý về cấu hình ở trên. Nhiều máy chủ ứng dụng sẽ trông giống như: vai trò: ứng dụng, "app1.example.com", "app2.example.com", "app3.example.com" – scottd

+3

Đây không phải là câu trả lời đúng dựa trên câu hỏi được yêu cầu – Rob

36

Giả sử capistrano multistage:

Trong config/deploy/production:

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

Bây giờ một cap deploy production sẽ triển khai đến tất cả 3 máy chủ.

+0

tôi làm gì nếu tôi muốn nhiều máy chủ sử dụng môi trường sản xuất, nhưng vẫn có thể triển khai đến một máy chủ cụ thể? Đưa ra ví dụ của bạn: chỉ cần triển khai đến "server1", nhưng chỉ có production.rb, điều này có khả thi không? – farukg

2

Đây là những gì tôi đã cố gắng trong rails 4:

config/deploy.rb:

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

Điều này làm việc cho tôi với Rails 4. –

Các vấn đề liên quan