Skip to main content
 首页 » 编程设计

python之在 fabric 任务中使用环境相关的 django 设置

2024年11月01日33lvdongjie

我正在尝试使用在设置文件上设置的数据库配置来使用 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)) 

但是我收到一个 ImportError:

ImportError: Could not import settings 'project.settings.production' 

我尝试使用 shell_env() 来设置 DJANGO_SETTINGS_MODULE 而不是 django.settings_module(env.settings),结果相同。

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

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

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

fab environment:live dump_database 
fab environment:otherhost dump_database 

无需从 fabfile 上的所有主机复制数据库设置。

请您参考如下方法:

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