Mam katalog na komputerze lokalnym, który chciałbym skopiować na komputer zdalny (i zmienić jego nazwę) za pomocą Fabric. Wiem, że mogę skopiować plik za pomocą put()
, ale co z katalogiem. Wiem, że użycie scp jest dość łatwe , ale wolałbym to zrobić od wewnątrz, fabfile.py
jeśli to możliwe.
79
fab
, żadnych sztuczek. Otrzymasz błędy, jeśli katalogi docelowe nie są jeszcze na miejscu - więc dołączyłem prosty plikmkdir -p
przed rozszerzeniemput
. (Ale inne podkatalogi, które znajdują się podtestdirectory
testamentem automatycznie utworzonym na zdalnym komputerze).put
działa. Czy będzie obsługiwać kopiowanie folderu z kompresją na komputerze źródłowym i dekompresję na komputerze zdalnym.Przyjrzałbym się także modułowi Project Tools: fabric.contrib.project Documentation
Ma
upload_project
funkcję, która pobiera katalog źródłowy i docelowy. Co więcej, istniejersync_project
funkcja korzystająca z rsync. Jest to fajne, ponieważ aktualizuje tylko te pliki, które się zmieniły i akceptuje dodatkowe argumenty, takie jak „wyklucz”, co jest przydatne do wykonywania takich czynności, jak wykluczanie.git
katalogu.Na przykład:
from fabric.contrib.project import rsync_project def _deploy_ec2(loc): rsync_project(local_dir=loc, remote_dir='/var/www', exclude='.git')
źródło
fabric.contrib.project
dokumenty do najnowszej wersji: docs.fabfile.org/en/latest/api/contrib/project.htmlput/get
. działa również doskonale do pobierania plików przesłanych przez użytkowników z aktywnych witryn internetowych (upload=False
nie jest oczywiste, że działa to w obie strony).exclude=['.git']
Użytkownicy korzystający z Fabric 2
put
nie mogą już przesyłać katalogów, tylko pliki. Ponadtorsync_project
nie jest już częścią głównego pakietu materiałów.contrib
Opakowanie zostało usunięte, jak wyjaśniono tutaj . Terazrsync_project
został zmieniony narsync
i musisz zainstalować inny pakiet, aby móc go używać:pip install patchwork
Zakładając, że już utworzyłeś połączenie ze swoim serwerem:
cxn = fabric.Connection('username@server:22')
Możesz użyć
rsync
jak poniżej:import patchwork.transfers patchwork.transfers.rsync(cxn, '/my/local/dir', target, exclude='.git')
Więcej informacji można znaleźć w dokumentacji tkaniny-patchwork .
źródło
connect_kwargs
. Na przykład:cxn = fabric.Connection('username@server:22', connect_kwargs=dict(password='yourpass'))
put
nie może przesłać w Fabric 2. Jeśli używasz Fabric 1, zapoznaj się z zaakceptowaną odpowiedzią. W przypadku Fabric 2 posługuję się przykładem podanym w odpowiedzi, używającrsync
.rozszerzając odpowiedź TGO, potrzebujesz źródła rsync, takiego jak cygwin, jeśli chcesz go używać w systemie Windows.
źródło