2009-06-04 31 views
13

Gần đây tôi đã chuyển một vài plugin của mình thành các mô-đun con và nhận ra rằng khi bạn "git clone" một kho lưu trữ, thư mục con sẽ bị trống. Điều này có ý nghĩa cho các nhà phát triển đồng khởi tạo các mô-đun con và cập nhật của chúng.Làm thế nào để bạn xử lý việc triển khai các ứng dụng đường ray với các mô-đun con?

Tuy nhiên, khi tôi triển khai với capistrano, mã submodule rõ ràng sẽ không được triển khai gây ra sự cố. Tôi có thể đi vào chi nhánh phát hành và init và cập nhật các mô-đun đó, nhưng đó rõ ràng không phải là một giải pháp lý tưởng.

Có ai có đề xuất về cách xử lý việc này không? Nó đơn giản như một nhiệm vụ capistrano?

Tôi là một chút noob ở khía cạnh sản xuất của sự vật.

Cảm ơn bạn!

Trả lời

12

Theo this recent thread, capistrano sẽ có thể init và cập nhật các môđun con của bạn:

set :git_enable_submodules,1 

trong config/deploy.rb nên là đủ, nếu .gitmodules mục của bạn được cập nhật.
Bạn có thể cần to patch Capistrano (lib/capistano/recipes/deploy/scm/git.rb) để đảm bảo các mô-đun con của bạn được bao gồm.

def checkout(revision, destination) 
     git  = command 

     branch = head 

     fail "No branch specified, use for example 'set :branch, \"origin/master\"' in your deploy.rb" unless branch 

     if depth = configuration[:git_shallow_clone] 
     execute = "#{git} clone --depth #{depth} #{configuration[:repository]} #{destination} && " 
     else 
     execute = "#{git} clone #{configuration[:repository]} #{destination} && " 
     end 

     execute += "cd #{destination} && #{git} checkout -b deploy #{branch}" 

     if submodules = configuration[:git_enable_submodules] 
     execute += " && git-submodule init &&" 
     execute += "git-submodule update" 
     end 

     execute 
    end 

Nếu bạn có nested submodules, bạn cần:

gem sources -a http://gems.github.com 
$ sudo gem install morhekil-capistrano-deepmodules 

Chỉ cần yêu cầu nó ở cấu hình triển khai của bạn:

require 'capistrano/deepmodules'

Đá quý sẽ tự động xử lý mọi phần còn lại.
Bạn có thể xóa :git_enable_submodules khỏi cấu hình của mình, đá quý không chú ý đến nó - nếu bạn đang yêu cầu, bạn đã nói rằng bạn muốn bật mô-đun phụ.

Và một chi tiết khác cần chú ý - hiện tại chỉ có chiến lược bộ nhớ cache từ xa mới được hỗ trợ bởi đá quý. Nó có nghĩa là bạn PHẢI thêm vào config bạn dòng sau:

set :deploy_via, :remote_cache 

Nó cho phép bộ nhớ cache từ xa và nó thực sự là điều bạn muốn làm anyway - triển khai codebases lớn với rất nhiều submodules và khác công cụ thực sự là một trải nghiệm phiền hà nếu bạn không có bộ nhớ cache phía máy chủ của nó.

5

set :git_enable_submodules, 1 trên riêng của nó đã không làm việc mà không cần tùy chọn này:

set :deploy_via, :remote_cache` 

này dường như không được ghi chép lại bất cứ nơi nào và đã cho tôi một thời gian để tìm ra. Nó nói chung là tốt để có tùy chọn đó anyway, ngay cả khi không có submodules.

5

Với this commit, Capistrano hỗ trợ cả hai mô-đun con Git và tùy chọn --recursive được nạp vào.Để kích hoạt tính năng hỗ trợ Git submodules, thêm video này vào tập tin deploy.rb của bạn:

set :git_enable_submodules, true

Và nếu bạn sử dụng recursive Git submodules, thêm này cũng như:

set :git_submodules_recursive, true

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