Fabric を使ってみた。

例えば、CUI でコマンド一発でデプロイしたい!とか、
コマンドが長いんで省略したいなーとか、開発していると出てくると思います。


そんなものを解消するソフトとして、 Python には Fabric というものがあります。
詳しくは 公式 のドキュメントや、
Pythonプロフェッショナルプログラミング (ステマ) に記載があるので参照いただけると幸いです。


さて、今回は Django の manage.py の settings 指定が手間だよねってのがあり、
作成しています。


内容は以下です。

# -*- coding: utf-8 -*-                                                                                                                         
from fabric.api import lcd, local
import os


DEV_SETTINGS = '--settings=%s' % 'app.settings.dev'
PROD_SETTINGS = '--settings=%s' % 'app.settings.prod'

ROOTPATH = os.path.dirname(
    os.path.dirname(os.path.abspath(__file__)))
PYTHON = os.path.join(ROOTPATH, 'bin', 'python2.7')
APPPATH = os.path.join(ROOTPATH, 'app')


def runserver(port=8000, prod=False):
    '''Fire up the Django test server, after cleaning out any .pyc files.

    Usage:

        $ fab runserver
        $ fab runserver:port=8001
    '''
    settings = PROD_SETTINGS if prod else DEV_SETTINGS
    with lcd(APPPATH):
        local("find . -name '*.pyc' -print0|xargs -0 rm", capture=False)
        local("%s manage.py runserver %s %s" % (PYTHON, port, settings), capture=False)


def manage(args='', prod=False):
    '''Execute manage.py with settings
    Usage:

        $ fab manage test
    '''
    settings = PROD_SETTINGS if prod else DEV_SETTINGS
    with lcd(APPPATH):
        args = args if args else 'help'
        local('%s manage.py %s %s' % (PYTHON, args, settings))


実行時は、fabfile.py があるフォルダや、 fabfile といったフォルダを
作成したりしてご利用ください。