Pregunta

Hace poco volví un par de mis plugins en submódulos y se dio cuenta de que cuando "git clone" un repositorio, el directorio submódulo va a estar vacío. Esto tiene sentido para los co-desarrolladores para inicializar sus submódulos y actualización.

Sin embargo, cuando despliego con Capistrano, obviamente, no puede implementar el código submódulo que causa problemas. Podría entrar en la rama de lanzamiento y INIT y actualizar el módulo de allí, pero que no es, evidentemente, una solución ideal.

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

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

Gracias!

¿Fue útil?

Solución

De acuerdo con este reciente hilo, Capistrano debe ser capaz de init y actualizar su submódulos:

set :git_enable_submodules,1

en config / deploy.rb debería ser suficiente, si sus entradas .gitmodules están al día.
Es posible que necesite parchear Capistrano (lib/capistano/recipes/deploy/scm/git.rb) para asegurarse de que sus submódulos sean incluidos embargo.

    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 usted tiene submódulos anidados , necesita:

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

Sólo se requieren en su configuración de despliegue:

requerir 'Capistrano / deepmodules'

  

La gema se hará cargo de todo el resto automáticamente.
  Puede eliminar :git_enable_submodules de su configuración, la gema no presta atención a ella -. Si está requiriendo que ya está diciendo que desea habilitar submódulos

     

Y un detalle más que prestar atención a - en el momento única estrategia de caché remota es apoyado por la gema. Esto significa que debe agregar a su config la línea siguiente:

set :deploy_via, :remote_cache
  

Permite que el caché remota y es realmente lo que quiere hacer de todos modos - el despliegue de grandes bases de código con una gran cantidad de submódulos y otras cosas es realmente una experiencia problemático si no tiene memoria caché del lado del servidor de la misma

.

Otros consejos

set :git_enable_submodules, 1 por sí mismo no funcionaba sin esta opción:

set :deploy_via, :remote_cache`

Esto no parece ser documentada en cualquier lugar y me tomó un tiempo para averiguar. Por lo general es bueno tener esa opción de todos modos, incluso sin submódulos.

, Capistrano permite ambos submódulos de Git y la opción --recursive al horno. Para habilitar el soporte de Git submódulos, añadir esto a su archivo deploy.rb:

set :git_enable_submodules, true

Y si utiliza recursiva Git submódulos , añadir esto como así:

set :git_submodules_recursive, true

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top