用 fabric 來 deploy - Oceanic / 人生海海
用 Fabric 來 Deploy
Oct 2nd, 2009
以前在寫 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 = ['tzangms@localhost'] def prod(): env.hosts = ['tzangms@tzangms.com', 'tzangms@tzangms2.com'] 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