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.pysi 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 -pantes delput. (Pero otros subdirectorios, que están debajo deltestdirectory, se crearán automáticamente en la máquina remota).putestá 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_projectfunción que toma un directorio de origen y de destino. Aún mejor, hay unarsync_projectfunció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.gitdirectorio.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.projectdocs 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=Falseno es obvio que funcione en ambos sentidos).exclude=['.git']Para aquellos que usan Fabric 2,
putya no pueden cargar directorios, solo archivos. Además,rsync_projectya no forma parte del paquete principal de Fabric. Elcontribpaquete se ha eliminado, como se explica aquí . Ahora, se lersync_projectha cambiado el nombre arsyncy necesita instalar otro paquete para poder usarlo:pip install patchworkAhora, asumiendo que ya ha creado una conexión a su servidor:
cxn = fabric.Connection('username@server:22')Puede utilizar
rsynclo 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'))putno 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