Fabric을 사용하여 원격 컴퓨터에 복사하고 이름을 바꾸려는 로컬 컴퓨터에 디렉터리가 있습니다. 을 사용하여 파일을 복사 할 수 있다는 것을 알고 put()
있지만 디렉토리는 어떻습니까? scp를 사용하는 것이 충분히 쉽다는 것을 알고 있지만 fabfile.py
가능하면 내에서 수행하는 것을 선호 합니다.
Fabric을 사용하여 원격 컴퓨터에 복사하고 이름을 바꾸려는 로컬 컴퓨터에 디렉터리가 있습니다. 을 사용하여 파일을 복사 할 수 있다는 것을 알고 put()
있지만 디렉토리는 어떻습니까? scp를 사용하는 것이 충분히 쉽다는 것을 알고 있지만 fabfile.py
가능하면 내에서 수행하는 것을 선호 합니다.
답변:
put
(적어도 1.0.0에서) 사용할 수도 있습니다 .
local_path
상대 또는 절대 로컬 파일 또는 디렉토리 경로 일 수 있으며 Python glob 모듈 에서 이해하는대로 쉘 스타일 와일드 카드를 포함 할 수 있습니다 . 물결표 확장 (os.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 = ['frodo@middleearth.com']
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')
# [frodo@middleearth.com] Executing task 'copy'
# [frodo@middleearth.com] run: mkdir -p /home/frodo/tmp
# [frodo@middleearth.com] put: testdirectory/HELLO -> \
# /home/frodo/tmp/testdirectory/HELLO
# [frodo@middleearth.com] put: testdirectory/WORLD -> \
# /home/frodo/tmp/testdirectory/WORLD
# ...
fab
이며 트릭은 없습니다. 대상 디렉토리가 이미에없는 경우, 오류를 얻을 것이다 - 나는 간단한 포함 있도록 mkdir -p
전과를 put
. (그러나 아래에있는 다른 하위 디렉터리 testdirectory
는 원격 컴퓨터에 자동으로 생성됩니다.)
put
작동합니다. 소스 컴퓨터에서 압축을 사용하여 폴더 복사를 지원하고 원격 컴퓨터에서 압축을 풉니 다.
또한 프로젝트 도구 모듈 인 fabric.contrib.project 문서 도 살펴 보겠습니다.
이것은 upload_project
소스 및 대상 디렉토리를 취하는 기능을 가지고 있습니다. 더 좋은 rsync_project
점은 rsync를 사용 하는 함수입니다. 이것은 변경된 파일 만 업데이트하고 .git
디렉토리를 제외하는 것과 같은 작업을 수행하는 데 유용한 "exclude"와 같은 추가 인수를 허용하기 때문에 좋습니다 .
예를 들면 :
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.html
put/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
.