Fabric で rsync する

Python のデプロイツールである Fabric を普段から使っている。


で、Fabric で rsync をする場合は以下のように書く。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os
from fabric.api import env, run, roles, cd
from fabric.contrib import project, console

env.user = 'username'
env.roledefs = {
    'web': ['192.168.1.10', '192.168.1.11', '192.168.1.12']
}
@roles('web')
def rsync():
    project_path = '/path/to/projects'
    dirname = os.path.dirname
    local_path = dirname(dirname(os.path.abspath(__file__)))
    with cd(project_path):
        exclude = ['*.pyc', '*~', '.DS*', '*.swp']
        project.rsync_project(project_path, local_dir=local_path, exclude=exclude)
$ fab rsync

Capistrano に比べてゴリゴリ Python のコードを書く感じ。


参考文献:
Welcome to Fabric’s documentation! — Fabric documentation
Fabric デプロイツールのPythonicな書き方 - Ian Lewis