如何强制Django使用某种排序规则创建测试数据库?

时间:2013-01-16 09:55:11

标签: django

我有一个Postgres安装,设置为使用LATIN1作为默认编码。但是,我的生产数据库要求我使用UTF8(它是在Heroku上托管的,所以我没有任何选择)。

我已经创建了我的本地开发数据库以正确设置:

sudo createdb -Upostgres $PROJECT_NAME --template=template0 \
    --encoding=UTF8 --lc-collate=en_US.UTF-8 --lc-ctype=en_US.UTF-8

然而,我现在无法运行django测试,因为测试数据库只使用默认的Postgres集群设置(LATIN1),这导致测试失败(我在某些模板中有无效的字符 - {{1 }})

'核'选项是使用正确的(en_US.UTF8)设置重新安装Postgres,但是因为我在VM中运行它,每次我启动VM时我真的不想这样做。如果有一种方法可以按摩Django来首先正确地创建数据库。

[更新1:TEST_ENCODING]

跟进@ sneawo的建议,我已经设置了数据库的TEST_ENCODING属性,现在得到以下错误:

...character 0xe28099 of encoding "UTF8" has no equivalent in "LATIN1"

[更新2:核选项]

我之前提到了这一点,并不适合所有人,但是因为我在VM上运行它,所以我很容易在我的Vagrant配置脚本(shell脚本)中使用正确的排序重新创建postgres集群:< / p>

Creating test database for alias 'default'...
Got an error creating the test database: encoding UTF8 does not match locale en_US
DETAIL:  The chosen LC_CTYPE setting requires encoding LATIN1.

我有从主机复制的sudo service postgresql stop sudo pg_dropcluster 9.1 --stop main sudo pg_createcluster --start -e UTF-8 9.1 main sudo cp -f $CONF_DIR/pg_hba.conf /etc/postgresql/9.1/main/pg_hba.conf sudo cp -f $CONF_DIR/postgresql.conf /etc/postgresql/9.1/main/postgresql.conf sudo service postgresql restart pg_hba.conf的默认“允许所有”版本,以覆盖创建群集时创建的默认值。这是一个大锤到裂缝的解决方案,但它确实有效,而且很快。

1 个答案:

答案 0 :(得分:0)

在底部settings.py

添加此代码
try:
    from local_settings import *
except ImportError:
    pass

在local_settings.py

中添加此代码
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'test_db',
        'USER': 'root',
        'PASSWORD': '',
        'HOST': '',
        'PORT': '3306',
        'OPTIONS': {
                    'charset': 'latin1',
                    'use_unicode': True, },
    }, 
}

将local_settings.py添加到git ignore。