Archive@2008/12

Twitter Design Generator Bookmarklet が Mashup of the Day になってた

ProgrammableWeb の Mashup of the Day にこの間作った Twitter Design Generator Bookmarklet が選ばれてました。登録したのは作った次の日くらいなので、すっかり忘れてたんですがブログのリファラで知りました。というわけで、記念スクショをとっておきました。

Mashup of the Day
Posted at: 
2008/12/24 04:36:10
0 Comments
0 TrackBacks
Tags: 
bookmarklet
design
twitter
Trackback: 
http://blog.monospace.jp/2008/12/24/mashup/trackback/

Fabric で Django アプリのデプロイ

Google App Engine のデプロイの簡単さを知ってからというもの Django アプリのデプロイもあのくらいにならないものかと思っていたわけですが、ちょっと Fabric というデプロイツールを見つけたので使ってみました。 Capistrano 的なものということですが、 Capistrano は使ったことがありません。 Fabric は Python 製ということで困った時のソース読みが可能なのでちょっと遊んでみることにしました。

Fabric

インストール

easy_install で一発です。これで /usr/local/bin/fab というコマンドがインストールされます。動作環境は、Leopard のデフォルト Python2.5.1 です。

$ sudo easy_install fabric
$ fab

fabfile.py の作成

デプロイ処理を fabfile.py というファイルに記述します。ここで書いた関数は、 $ fab コマンド名 のコマンド名部分になります。

SSH でログインして、リポジトリから最新版をもってきて、Apache をリロードするって流れを作ります。あ、その前にテストを通ったらってのも重要ですね。

今回リモートに使ってるサーバは、Ubuntuのちょっと前のやつです。(なにかわすれた)

#vim: fileencoding=utf8:

def pull():
    "リポジトリから最新版を取得"
    run('cd $(project_dir); hg pull')

def test():
    "テストを実行"
    local('python manage.py test', fail='abort')

def reload():
    "Apacheのリロード"
    sudo("/etc/init.d/apache2 reload")

def staging():
    "ステージングサーバを選択"
    set(fab_hosts = ['stg.co-soku.jp'])
    set(project_dir = '~/www/stg.co-soku.jp')

def production():
    "プロダクションサーバを選択"
    set(fab_hosts = ['co-soku.jp'])
    set(project_dir = '~/www/co-soku.jp')

今のところ easy_install で入るバージョンだと、set という fabric の関数を使ってるんですが、これは、最新のリポジトリでは、 config.fab_hosts という形式に変更になってるっぽいです。組み込みの set とかぶりますからねえ。ちなみに、set()で設定したものは、$()で取得できます。 $ なんて Python っぽくないかも。

local 関数は、ローカルでの実行。run 関数は、リモートでの実行。 sudo 関数は、リモートで sudo 使う場合のやつです。ちなみに、SSH の接続でパスフレーズなしのキーを使ってると、sudo の実行の時にパスワードが聞かれない問題があるみたいです。というわけで自分は、visudo で apache の再起動コマンドだけを NOPASSWD 設定にしました。

test コマンドは、fail というキーワード引数を渡して失敗した場合の処理を決めます。 'abort' は処理を中断。'ignore' は無視して次の処理へ。 'warn' は、エラーを吐いて進むって感じです。

使い方

Django の プロジェクトルートに fabfile.py を置いて実行します。

テストして、ステージングに接続して、hg pull して、 Apache のリロードという流れを実行します。この場合、test のときに fail='abort' を設定しているので、テストがこけるとそこでデプロイは中断されます。

$ fab test staging pull reload

これだと、以下のようにテストを飛ばせてしまうので、staging や production コマンドの中に、 invoke(test) とか書いておくと、いいかもって書いてありました。

Deploying Django with Fabric @ Irrational Exuberance

$ fab staging pull reload

他のデプロイツールを使ったことがないのでなんとも言えませんが、普通に使えるなあと思いました。

Posted at: 
2008/12/08 01:24:33
0 Comments
0 TrackBacks
Tags: 
Django
python
Trackback: 
http://blog.monospace.jp/2008/12/08/deploy_django_apps_with_fabric/trackback/