Ich habe ein Verzeichnis auf meinem lokalen Computer, das ich mit Fabric auf einen Remotecomputer kopieren (und umbenennen) möchte. Ich weiß, dass ich Dateien mit kopieren kann put()
, aber was ist mit einem Verzeichnis? Ich weiß, dass es mit scp einfach genug ist , aber ich würde es vorziehen, fabfile.py
wenn möglich aus meinem Inneren heraus .
79
fab
, keine Tricks. Sie erhalten Fehler, wenn die Zielverzeichnisse noch nicht vorhanden sind - daher habe ich ein einfachesmkdir -p
vor dem eingefügtput
. (Andere Unterverzeichnisse, die sich unter dem befinden,testdirectory
werden automatisch auf dem Remote-Computer erstellt.)put
funktioniert. Unterstützt es das Kopieren von Ordnern mit Komprimierung auf dem Quellcomputer und Dekomprimieren auf dem Remotecomputer?Ich würde mir auch das Project Tools-Modul ansehen: Fabric.contrib.project Documentation
Dies hat eine
upload_project
Funktion, die ein Quell- und ein Zielverzeichnis übernimmt. Noch besser ist, dass es einersync_project
Funktion gibt, die rsync verwendet. Dies ist hilfreich, da nur die geänderten Dateien aktualisiert werden und zusätzliche Argumente wie "ausschließen" akzeptiert werden. Dies ist hilfreich, wenn Sie beispielsweise Ihr.git
Verzeichnis ausschließen möchten .Zum Beispiel:
from fabric.contrib.project import rsync_project def _deploy_ec2(loc): rsync_project(local_dir=loc, remote_dir='/var/www', exclude='.git')
quelle
fabric.contrib.project
Dokumente für die neueste Version: docs.fabfile.org/en/latest/api/contrib/project.htmlput/get
. funktioniert auch perfekt zum Abrufen von Benutzer-Uploads von Live-Websites (upload=False
es ist nicht offensichtlich, dass es auf beide Arten funktioniert).exclude=['.git']
Für diejenigen, die Fabric 2 verwenden,
put
können keine Verzeichnisse mehr hochgeladen werden, sondern nur Dateien. Ist auchrsync_project
nicht mehr Teil des Fabric-Hauptpakets. Dascontrib
Paket wurde entfernt, wie hier erläutert . Jetztrsync_project
wurde in umbenanntrsync
und Sie müssen ein anderes Paket installieren, um es verwenden zu können:pip install patchwork
Angenommen, Sie haben bereits eine Verbindung zu Ihrem Server hergestellt:
cxn = fabric.Connection('username@server:22')
Sie können
rsync
wie folgt verwenden:import patchwork.transfers patchwork.transfers.rsync(cxn, '/my/local/dir', target, exclude='.git')
Weitere Informationen finden Sie in der Fabric-Patchwork-Dokumentation .
quelle
connect_kwargs
. Zum Beispiel:cxn = fabric.Connection('username@server:22', connect_kwargs=dict(password='yourpass'))
put
kann in Fabric 2 nicht hochgeladen werden. Wenn Sie Fabric 1 verwenden, lesen Sie bitte die akzeptierte Antwort. Bei Fabric 2 verwende ich das in der Antwort angegebene Beispiel mitrsync
.Um die Antwort von TGO zu erweitern, benötigen Sie eine Rsync-Quelle wie Cygwin, wenn Sie sie auf einem Windows-System verwenden möchten.
quelle