gpt4 book ai didi

django - 如何强制 Django 创建具有特定排序规则的测试数据库?

转载 作者:行者123 更新时间:2023-12-03 17:54:03 24 4
gpt4 key购买 nike

我有一个 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),这会导致测试失败(我在某些模板中有无效字符 - ...character 0xe28099 of encoding "UTF8" has no equivalent in "LATIN1")

“核”选项是使用正确的 (en_US.UTF8) 设置重新安装 Postgres,但是由于我在 VM 中运行它,因此每次启动 VM 时,我都不想这样做。如果有一种方法可以让 Django 首先正确创建数据库,那将是更可取的。

[更新 1:TEST_ENCODING]

按照@sneawo 的建议,我已经设置了数据库的 TEST_ENCODING 属性,现在出现以下错误:
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.

[更新 2:核选项]

我在上面提到了这一点,它并不适合所有人,但由于我在 VM 上运行它,因此在我的 Vagrant 配置脚本(shell 脚本)中使用正确的排序规则重新创建 postgres 集群实际上非常容易:
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.confpostgresql.conf我从主机复制过来以覆盖创建集群时创建的默认值。这是一个大锤到破解坚果的解决方案,但它确实有效,而且速度很快。

最佳答案

在底部 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 中。

关于django - 如何强制 Django 创建具有特定排序规则的测试数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14355580/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com