用 fabric 來 deploy

以前在寫 php 的時候是用 ruby 的 capistrano 來 deploy 程式, 雖然後來 php 好像有 phing, 雖然沒去深入研究, 可是光看文件就覺得沒有 capistrano 方便。 現在跑到 python, 當然就用 fabric 來 deploy, 雖然不像 capistrano 有 transaction, 不過也很夠用了。 ( 以下用的是 fabric 1.0.0a 的版本, 目前透過 easy_install 的版本好像還滿舊的 )

基本上 fabric 跟 capistrano 差不多 ( 應該就是學 capistrano 的 XD ), 寫個 fabfile.py 如下:

from __future__ import with_statement  
from fabric.api import run, sudo  
from fabric.context_managers import cd

PROJECT_PATH = '/var/www/myproject'

def dev():  
    env.hosts = [[email protected]']

def prod():  
    env.hosts = [[email protected]', [email protected]']

def deploy():  
    with cd(PROJECT_PATH):
        run('hg revert . --no-backup; hg pull -u ')
        run("sed -i -e 's/DEBUG = .*/DEBUG = False/' settings.py")
        run('python manage.py migrate')
        sudo('service apache2 reload')

fabfile.py 大概像上面這樣, 接著就可以用下面指令來 deploy 到 dev 的環境:

fab dev deploy  

或者 deploy 到 production:

fab prod deploy  

真是超方便的 :p 不過當然這個 fabfile 簡化了許多實際上在 deploy 的手續, 不過應該可以描劃出基本 deploy 的方式, 以往用 capistrano 可以搭配 transaction 寫 rollback, 還有加上 deploy 版本的處理, 可以直接 rollback 版本, 不過後來超懶, 直接用 mercurial revert, 然後 pull -u, anyway, 有興趣的人在玩看看吧 :p

tzangms

Read more posts by this author.

Subscribe to Oceanic / 海海人生

Get the latest posts delivered right to your inbox.

or subscribe via RSS with Feedly!