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