¿Cómo se maneja la implementación de aplicaciones carriles de cartuchos?
-
11-09-2019 - |
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!
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ódulosY 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