2011-03-15 11 views

Respuesta

98

Puede utilizar put para eso también (al menos en 1.0.0):

local_path puede ser un archivo local relativa o absoluta o ruta de directorio, y puede contener comodines de estilo concha, según lo entiende Python glob módulo. La expansión de Tilde (según lo implementado por os.path.expanduser) también se realiza.

Ver: http://docs.fabfile.org/en/1.0.0/api/core/operations.html#fabric.operations.put


Actualización: Este ejemplo funciona bien (para mí) en 1.0.0 .:

from fabric.api import env 
from fabric.operations import run, put 

env.hosts = ['[email protected]'] 

def copy(): 
    # make sure the directory is there! 
    run('mkdir -p /home/frodo/tmp') 

    # our local 'testdirectory' - it may contain files or subdirectories ... 
    put('testdirectory', '/home/frodo/tmp') 

# [[email protected]] Executing task 'copy' 
# [[email protected]] run: mkdir -p /home/frodo/tmp 
# [[email protected]] put: testdirectory/HELLO -> \ 
#  /home/frodo/tmp/testdirectory/HELLO 
# [[email protected]] put: testdirectory/WORLD -> \ 
#  /home/frodo/tmp/testdirectory/WORLD 
# ... 
+0

Gracias. Me aparece una excepción (¿es un directorio) alguna posibilidad de ejemplo? –

+0

@gaviscon_man: Se agregó un ejemplo (probado), pero realmente es solo 'fab' vainilla, no hay trucos. Obtendrá errores, si los directorios de destino ya no están en su lugar, así que incluí un simple 'mkdir -p' antes del' put'. (Pero otros subdirectorios, que están debajo del 'testdirectory' se crearán automáticamente en la máquina remota). – miku

+0

Gracias, eso es muy útil. –

28

También me gustaría ver en el módulo de Herramientas del proyecto: Tela .contrib.project Documentation

Esto tiene un upload_project función que toma un directorio de origen y destino. Aún mejor, hay una función rsync_project 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 el directorio .git.

Por ejemplo:

from fabric.contrib.project import rsync_project 

def _deploy_ec2(loc): 

    rsync_project(local_dir=loc, remote_dir='/var/www', exclude='.git') 
+2

'fabric.contrib.project' docs para la última versión: http://docs.fabfile.org/en/latest/api/contrib/project.html – lsh

+0

mucho mejor que' put/get'. también funciona perfectamente para buscar cargas de usuarios desde sitios web en vivo, por ejemplo ('upload = False', no es obvio que funcione de las dos maneras). – benzkji

+0

tuve que envolver el directorio excluido en una lista para que esto funcione: 'exclude = ['. Git']' –

Cuestiones relacionadas