¿Cómo maneja la implementación de aplicaciones de Rails con submodules?

Recientemente convertí un par de mis complementos en submodules y me di count de que cuando "git clone" un repository, el directory de submodules estará vacío. Esto tiene sentido para los codesarrolladores para inicializar sus submodules y actualizarlos.

Sin embargo, cuando implemente con capistrano, obviamente no se implementará el código del submodule, lo que causa problemas. Podría entrar en la twig de lanzamiento e iniciar y actualizar el module allí, pero obviamente no es una solución ideal.

¿Alguien tiene sugerencias sobre cómo manejar esto? ¿Es tan simple como una tarea capistrano?

Soy un poco novato en el lado de la producción de cosas.

¡Gracias!

Según este hilo reciente , capistrano debería poder iniciar y actualizar sus submodules:

set :git_enable_submodules,1 

en config / deploy.rb debería ser suficiente, si sus inputs de .gitmodules están actualizadas.
Es posible que deba aplicar un parche a Capistrano ( lib/capistano/recipes/deploy/scm/git.rb ) para asegurarse de que los submodules se incluyan.

  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 

Si tiene submodules nesteds , necesita:

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

Solo requiérelo en su configuration de implementación:

requiere 'capistrano / deepmodules'

La gem se ocupará de todo el rest automáticamente.
Puedes eliminar :git_enable_submodules de tu configuration, la gem no le presta atención, si lo estás requiriendo ya estás diciendo que quieres habilitar los submodules.

Y un detalle más para prestar atención: en este momento, solo la estrategia de caching remota es compatible con la gem. Significa que DEBE agregar a su config la siguiente línea:

 set :deploy_via, :remote_cache 

Permite la memory caching remota y realmente es lo que quieres hacer de todos modos: implementar bases de código grandes con muchos submodules y otras cosas es realmente una experiencia problemática si no tienes memory caching del lado del server.

set :git_enable_submodules, 1 en sí mismo no funcionó sin esta opción:

 set :deploy_via, :remote_cache` 

Esto no parece estar documentado en ningún lado y me tomó un time darme count. En general, es bueno tener esa opción de todos modos, incluso sin submodules.

Con este compromiso , Capistrano tiene soporte tanto para los submodules de Git como para la opción recursiva incorporada. Para habilitar el soporte de submodules de Git, agréguela a su file deploy.rb :

set :git_enable_submodules, true

Y si usa submodules de Git recursivos , agregue esto también:

set :git_submodules_recursive, true