我正在使用 DRF,并且测试是为 API 编写的。我想在 heroku 上运行这些测试,并在我的开发环境的管道中使用 CI。
在配置中使用默认 SQLlite db 时,我得到的错误 -
通常,Django 将使用与“postgres”数据库的连接来避免在不需要时(例如,在运行测试时)对生产数据库运行初始化查询。Django 无法创建到“postgres”数据库的连接,而是使用第一个 PostgreSQL 数据库。
我的代码和配置
测试_*.py
class TestUser(APITestCase):
def setUp(self):
...
def test_user(self):
...
base.py 文件
db_config = dj_database_url.config(conn_max_age=600, ssl_require=False)
DATABASES_AVAILABLE = {
'test': db_config,
'sqlite': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
},
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
},
}
database = os.environ.get('DJANGO_DATABASE_TEST', 'sqlite')
DATABASES = {
'default': DATABASES_AVAILABLE[database]
}
# Database Configuration Ends
django_heroku.settings(locals())
在 Heroku CI Configs 中,我有
DJANGO_DATABASE_TEST : test
应用程序.json
{
"buildpacks": [{ "url": "heroku/python" }],
"environments": {
"test": {
"env": { "POSTGRESQL_VERSION": "10" },
"addons": ["heroku-postgresql:in-dyno"],
"scripts": {
"test": "./manage.py migrate && ./manage.py test"
}
}
}
}
我在 heroku ci 中遇到的错误
django.db.utils.OperationalError: server does not support SSL, but SSL was required
更新1:
django_heroku.settings(locals())
db_config = dj_database_url.config(conn_max_age=600, ssl_require=False)
DATABASES_AVAILABLE = {
'test': db_config,
'sqlite': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
},
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
},
}
database = os.environ.get('DJANGO_DATABASE_TEST', 'sqlite')
DATABASES = {
'default': DATABASES_AVAILABLE[database]
}
如果我 django_heroku.settings(locals(), databases=True)
在之前移动,DATABASE
那么我会收到此错误
psycopg2.errors.UndefinedObject: role "postgres" does not exist