У меня есть каталог на моем локальном компьютере, который я хотел бы скопировать на удаленный компьютер (и переименовать) с помощью Fabric. Я знаю, что могу скопировать файл с помощью put()
, но как насчет каталога. Я знаю, что использовать scp достаточно просто , но я бы предпочел делать это изнутри, fabfile.py
если это возможно.
79
fab
, никаких уловок. Вы получите ошибки, если целевые каталоги еще не созданы, поэтому я включил простойmkdir -p
перед расширениемput
. (Но другие подкаталоги, находящиеся ниже,testdirectory
будут автоматически созданы на удаленном компьютере).put
работает. Будет ли он поддерживать копирование папки со сжатием на исходной машине и распаковкой на удаленной машине.Я бы также посмотрел на модуль Project Tools: fabric.contrib.project Documentation
У этого есть
upload_project
функция, которая принимает исходный и целевой каталог. Более того, естьrsync_project
функция, использующая rsync. Это хорошо, потому что он обновляет только те файлы, которые были изменены, и принимает дополнительные аргументы, такие как «exclude», что удобно для таких вещей, как исключение вашего.git
каталога.Например:
from fabric.contrib.project import rsync_project def _deploy_ec2(loc): rsync_project(local_dir=loc, remote_dir='/var/www', exclude='.git')
источник
fabric.contrib.project
документы для последней версии: docs.fabfile.org/en/latest/api/contrib/project.htmlput/get
. также отлично работает, например, для загрузки пользовательских загрузок с живых веб-сайтов (upload=False
не очевидно, что это работает в обоих направлениях).exclude=['.git']
Те, кто использует Fabric 2,
put
больше не могут загружать каталоги, только файлы. Кроме того,rsync_project
он больше не является частью основного пакета Fabric.contrib
Пакет был удален, как описано здесь . Теперьrsync_project
он был переименован вrsync
, и вам нужно установить другой пакет, чтобы иметь возможность его использовать:pip install patchwork
Теперь, если вы уже создали соединение с вашим сервером:
cxn = fabric.Connection('username@server:22')
Вы можете использовать
rsync
как показано ниже:import patchwork.transfers patchwork.transfers.rsync(cxn, '/my/local/dir', target, exclude='.git')
Пожалуйста, обратитесь к документации по ткани-пэчворк для получения дополнительной информации.
источник
connect_kwargs
. Например:cxn = fabric.Connection('username@server:22', connect_kwargs=dict(password='yourpass'))
put
не может загружать в Fabric 2. Если вы используете Fabric 1, обратитесь к принятому ответу. С Fabric 2 я использую пример, приведенный в ответе, используяrsync
.расширяя ответ TGO, вам понадобится источник rsync, такой как cygwin, если вы хотите использовать его в системе Windows.
источник