2011-01-01 31 views
5

Tôi đang cố gắng sử dụng Capistrano để triển khai hai vai trò khác nhau, bằng cách sử dụng Bundler trên cả hai, tuy nhiên lệnh Bundler và cờ sẽ khác nhau. Có thể đặt các biến cụ thể cho vai trò không? Hoặc là một cái gì đó như:Capistrano có thể đặt các biến dựa trên vai trò không?

set :bundle_flags, "--deployment --quiet", :role => "web" 

hay:

role :web do 
    set :bundler_cmd, "--deployment --quiet" 
end 

Cả hai tùy chọn làm việc, tất nhiên. Có cách nào để thực hiện điều này, hoặc một cái gì đó như nó?

Trả lời

1

Không có cách nào để có giá trị biến tùy chỉnh cho mỗi vai trò.

Thay vào đó, bạn có thể sử dụng tiện ích mở rộng nhiều tầng từ capistrano-ext để có các giai đoạn khác nhau cho hai vai trò khác nhau của bạn.

Nếu giai đoạn khác nhau không có ý nghĩa cho việc triển khai của bạn, bạn có thể viết bó của riêng bạn: install và chạy các lệnh khác nhau dựa trên vai trò

run "bundle --deployment --quiet", :roles => :web 
run "bundle --deployment", :roles => :app 

Như đã đề cập trong các bình luận bên dưới, cách tiếp cận này, tuy nhiên , sẽ tăng lỗi nếu vai trò không có máy chủ được xác định. Nó cũng sẽ chạy mỗi lệnh serially. Để làm việc xung quanh cả hai vấn đề đó, hãy sử dụng trình trợ giúp song song.

parallel do |session| 
    session.when 'in?(:web)', "bundle --deployment --quiet" 
    session.when 'in?(:app)', "bundle --deployment" 
end 
+0

Đa tầng sẽ không hoạt động vì tôi đã sử dụng nó cho các giai đoạn triển khai khác nhau. Ngoài ra, việc đặt các lệnh nối tiếp như vậy sẽ chạy chúng trên một vai trò và sau đó lệnh kia, có thể hoặc không có vấn đề gì. Tôi tin rằng nó cũng sẽ gây ra lỗi nếu bạn không có máy chủ nào phù hợp với vai trò. – silvamerica

+0

Bạn đang đúng về cách tiếp cận chạy. Tôi đã thêm một phụ lục về cách sử dụng trình trợ giúp song song để làm việc xung quanh cả hai vấn đề. –

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