Django との統合

バージョン 0.9.2 で追加.

これらの関数はDjangoのモジュール環境変数の初期化プロセスを簡素化します。ひとたび行われると、manage.py プラグインの利用を要求されることなく、もしくは自分のfabfileを使うごとに環境変数を設定することなく、fabfileがDjangoプロジェクトもしくはDjango自身からインポートします。

いまのところこれらの関数は、Djangoインストールのご自分のローカルのfabfileとのやり取りをFabricができるようにしているだけです。これはそれほど限定的なものではありません。例えば、ローカルでの利用と同じようにリモートの”build” ツールとしてFabricを利用することも可能です。次のfabfileをご覧ください:

from fabric.api import run, local, hosts, cd
from fabric.contrib import django

django.project('myproject')
from myproject.myapp.models import MyModel

def print_instances():
    for instance in MyModel.objects.all():
        print(instance)

@hosts('production-server')
def print_production_instances():
    with cd('/path/to/myproject'):
        run('fab print_instances')

Fabricがローカルとリモートの両方にインストールされていれば、print_production_instances をローカルで実行すると本番サーバー上の print_instances を実行します。そして、これは本番のDjangoデータベースとやり取りを行います。

別の例として、ローカルとリモートのセッティングが似ている場合、これを利用して、例えばデータベースのセッティングを取得し、それをリモート(非Fabricの)コマンド実行時に利用することも可能です。こうすれば、Fabricがローカルにしかインストールされていなくてもある程度の自由を得ることができます。

from fabric.api import run
from fabric.contrib import django

django.settings_module('myproject.settings')
from django.conf import settings

def dump_production_database():
    run('mysqldump -u %s -p=%s %s > /tmp/prod-db.sql' % (
        settings.DATABASE_USER,
        settings.DATABASE_PASSWORD,
        settings.DATABASE_NAME
    ))

上のスニペットは、ローカルの開発環境からの起動で動作し、データベースの接続情報に関して提供されたローカルの settings.py がリモートの設定を反映します。

fabric.contrib.django.project(name)

DJANGO_SETTINGS_MODULE'<name>.settings' にセットします。

この機能は、設定ファイルやその場所にDjangoのデフォルト命名規約を利用している場合に、よくあるケースの便利なショートカットを提供します。

settings_module を利用します – なぜ、そしてどのようにこの機能を利用するのかについての詳細はそのドキュメントをご覧ください。

fabric.contrib.django.settings_module(module)

DJANGO_SETTINGS_MODULE のシェル環境変数を module にセットします。

シェル環境変数 DJANGO_SETTINGS_MODULE を正しく設定しない限り、Djangoの仕組みにより、DjangoもしくはDjangoプロジェクトからのインポートは、失敗します(the Django settings docs を参照してください)。

この関数はそのようにするショートカットを提供します。fabfileもしくはFabricを利用しているコードの一番うえのほうで呼び出すと、それ以降のどこでもDjangoのインポートは正しく動作します。

ノート

この関数は シェル 環境変数を(os.environ 経由で)セットしますが、Fabric自身の内部 “env” 変数とは関連しません。