Tengo un directorio en mi máquina local que me gustaría copiar a una máquina remota (y cambiarle el nombre) usando Fabric. Sé que puedo copiar archivos usando put()
, pero ¿qué pasa con un directorio? Sé que es bastante fácil usar scp , pero preferiría hacerlo desde dentro de mi, fabfile.py
si es posible.
79
fab
, sin trucos. Obtendrá errores, si los directorios de destino aún no están en su lugar, por lo que incluí un simplemkdir -p
antes delput
. (Pero otros subdirectorios, que están debajo deltestdirectory
, se crearán automáticamente en la máquina remota).put
está trabajando. ¿Admitirá la copia de carpetas con comprimir en la máquina de origen y descomprimir en una máquina remota?También miraría el módulo Herramientas del proyecto: fabric.contrib.project Documentation
Tiene una
upload_project
función que toma un directorio de origen y de destino. Aún mejor, hay unarsync_project
función que usa rsync. Esto es bueno porque solo actualiza los archivos que han cambiado y acepta argumentos adicionales como "excluir", lo cual es bueno para hacer cosas como excluir su.git
directorio.Por ejemplo:
from fabric.contrib.project import rsync_project def _deploy_ec2(loc): rsync_project(local_dir=loc, remote_dir='/var/www', exclude='.git')
fuente
fabric.contrib.project
docs para la última versión: docs.fabfile.org/en/latest/api/contrib/project.htmlput/get
. también funciona perfectamente para obtener cargas de usuarios de sitios web en vivo, por ejemplo (upload=False
no es obvio que funcione en ambos sentidos).exclude=['.git']
Para aquellos que usan Fabric 2,
put
ya no pueden cargar directorios, solo archivos. Además,rsync_project
ya no forma parte del paquete principal de Fabric. Elcontrib
paquete se ha eliminado, como se explica aquí . Ahora, se lersync_project
ha cambiado el nombre arsync
y necesita instalar otro paquete para poder usarlo:pip install patchwork
Ahora, asumiendo que ya ha creado una conexión a su servidor:
cxn = fabric.Connection('username@server:22')
Puede utilizar
rsync
lo siguiente:import patchwork.transfers patchwork.transfers.rsync(cxn, '/my/local/dir', target, exclude='.git')
Consulte la documentación de fabric-patchwork para obtener más información.
fuente
connect_kwargs
. Por ejemplo:cxn = fabric.Connection('username@server:22', connect_kwargs=dict(password='yourpass'))
put
no puede cargar en Fabric 2. Si está utilizando Fabric 1, consulte la respuesta aceptada. Con Fabric 2 utilizo el ejemplo proporcionado en la respuesta, usandorsync
.extendiendo la respuesta de TGO, necesita una fuente de rsync como cygwin si desea usarlo en un sistema Windows.
fuente