web-dev-qa-db-ja.com

Fabricを使用してディレクトリをリモートマシンにコピーするにはどうすればよいですか?

ローカルマシンに、Fabricを使用してリモートマシンにコピー(および名前変更)したいディレクトリがあります。 put()を使用してファイルをコピーできることは知っていますが、ディレクトリについてはどうですか。 scpを使用するのは簡単ですが、_fabfile.py 可能なら。

77
gaviscon_man

putを使用することもできます(少なくとも1.0.0では):

local_pathは、相対または絶対ローカルファイルまたはディレクトリパスであり、シェルスタイルのワイルドカード、Pythonglobモジュールで理解されています。 .path.expanduser)も実行されます。

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


更新:この例は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
# ...
111
miku

また、プロジェクトツールモジュールを見ます:fabric.contrib.project Documentation

これには、ソースディレクトリとターゲットディレクトリを取得するupload_project関数があります。さらに良いことに、rsyncを使用するrsync_project関数があります。これは、変更されたファイルのみを更新し、.gitディレクトリを除外するなどのことを行うためのニースである "exclude"のような追加の引数を受け入れるためです。

例えば:

from fabric.contrib.project import rsync_project

def _deploy_ec2(loc):

    rsync_project(local_dir=loc, remote_dir='/var/www', exclude='.git')
31
Seth Gottlieb

Fabric 2を使用している場合、putはディレクトリをアップロードできなくなり、ファイルのみをアップロードできます。また、rsync_projectは、メインのFabricパッケージの一部ではなくなりました。 contribパッケージは削除されました ここで説明したように 。今、rsync_projectrsyncに名前が変更されました。使用するには、別のパッケージをインストールする必要があります。

pip install patchwork

ここで、すでにサーバーへの接続を作成していると仮定します。

cxn = fabric.Connection('username@server:22')

以下のようにrsyncを使用できます。

import patchwork.transfers
patchwork.transfers.rsync(cxn, '/my/local/dir', target, exclude='.git')

詳細については、 fabric-patchwork documentation を参照してください。

4
TGO

tGOの答えを拡張すると、Windowsシステムで使用する場合は、cygwinなどのrsyncのソースが必要です。

0
Exis Zhang