在fabric tas中使用依赖于环境的Django设置

2024-09-27 00:21:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用设置文件上的数据库配置集使用fabric进行数据库转储。在

有多个设置文件,所以我希望能够根据我选择的环境进行设置。在

现在,我的任务是这样的

def dump_database():
    with cd('~/project_folder'), prefix(WORKON_VIRTUALENV):

        django.settings_module(env.settings)
        from django.conf import settings

        dbname = settings.DATABASES['default']['NAME']
        dbuser = settings.DATABASES['default']['USER']
        dbpassword = settings.DATABASES['default']['PASSWORD']

        fname = '/tmp/{0}-backup-{1}.sql.gz'.format(
            dbname,
            time.strftime('%Y%m%d%H%M%S')
        )

        run('mysqldump -u %s -p=%s %s | gzip -9 /tmp/backup-%s.sql.gz' % (
            dbuser,
            dbpassword,
            dbname,
            fname))

但我有一件事很重要:

^{pr2}$

我尝试使用shell_env()来设置DJANGO_SETTINGS_模块,而不是django.settings_模块(环境设置),结果相同。在

我使用一个任务根据环境指令更改环境:

def environment(name):
    env.update(environments[name])
    env.environment = name

这样,我希望能够从多个主机创建转储,例如:

fab environment:live dump_database
fab environment:otherhost dump_database

不必在fabfile上从所有主机复制数据库设置。在


Tags: 文件djangonameenv数据库defaultsettingsenvironment
2条回答

这里解释如何在fabric中导入Django设置文件。 http://fabric.readthedocs.org/en/1.3.3/api/contrib/django.html

引自以上链接:

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
    ))

注意:我不回答问题,但提供了不同的解决方案

我也有同样的问题。。所以我做了这样的自定义.py脚本:

我创建了一个名为dump的文件_数据库(放在旁边工厂文件.py例如,在远程计算机上)

import os
import sys
from datetime import datetime
from django.conf import settings


def dump_mysql():
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", SETTINGS_MODULE)
    DB_NAME = settings.DATABASES['default']['NAME']
    DB_USER = settings.DATABASES['default']['USER']
    DB_PASSWORD = settings.DATABASES['default']['PASSWORD']

    dump_file_name = '{time}_{db_name}.sql'.format(
        time=datetime.now().strftime('%Y_%m_%d'),
        db_name=DB_NAME,
    )

    os.system('mysqldump -u {db_user} -p{db_password} {db_name} > {to_file}'.format(
        db_user=DB_USER,
        db_password=DB_PASSWORD,
        db_name=DB_NAME,
        to_file=dump_file_name,
    ))

    return dump_file_name


if __name__ == '__main__':
    try:
        SETTINGS_MODULE = sys.argv[1:].pop()
    except IndexError:
        SETTINGS_MODULE = 'project_name.settings'

    print dump_mysql()

如你所见系统argv[1:].pop()尝试使用可选参数(本例中为设置模块)。在

所以在我的fabfile中: 导入操作系统

^{pr2}$

在哪里环境='项目_名称.设置.环境模块'

这就是我如何转储我的数据库,并复制回我。在

希望它对某人有用!:)

相关问题 更多 >

    热门问题