LaS*_*ell 2 django python-3.x travis-ci
我有一个非常基本的 Django 应用程序(Python 3.6.4),我编写了一个在本地通过的单元测试。为测试创建内存 SQLite DB(默认情况下)。当我的 Travis CI 构建运行相同的测试时,测试通过但测试命令失败并出现以下错误:
File "/home/travis/virtualenv/python3.6.5/lib/python3.6/site-packages/django/db/backends/sqlite3/base.py", line 301, in execute
return Database.Cursor.execute(self, query)
django.db.utils.OperationalError: near "SCHEMA": syntax error
The command "python manage.py test --settings=myapp.dev_settings" exited with 1.
Run Code Online (Sandbox Code Playgroud)
我注意到的一件奇怪的事情是,当在 Travis 上运行测试时,它说它正在重用现有的数据库并且在测试运行后永远不会破坏它:
$ python manage.py test --settings=myapp.dev_settings
Run Code Online (Sandbox Code Playgroud)
使用现有的测试数据库作为别名 'default'...
我不太明白,因为它应该是一个内存数据库,当我在本地运行它时,每次都会创建一个新数据库:
Creating test database for alias 'default'...
. . .
Destroying test database for alias 'default'...
Run Code Online (Sandbox Code Playgroud)
我的dev_settings.py文件在文件系统上有一个 sqlite db,但这仅用于运行本地开发服务器:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
Run Code Online (Sandbox Code Playgroud)
Travis 安装了所有依赖项,它们与我的本地环境相匹配(我很确定)。
任何帮助都会很棒,我在这里肯定遗漏了一些明显的东西!!!
这是因为 Django-Heroku 包设置了自己的测试运行器,如果它检测到 CI 环境,它会对数据库做额外的事情,大概是为了迎合他们的 Heroku CI 产品:
# Enable test runner if found in CI environment.
if 'CI' in os.environ:
config['TEST_RUNNER'] = 'django_heroku.HerokuDiscoverRunner'
Run Code Online (Sandbox Code Playgroud)
测试运行器执行以下不适用于 SQLite 的操作:
with connection.cursor() as cursor:
cursor.execute(
"""
DROP SCHEMA public CASCADE;
CREATE SCHEMA public;
GRANT ALL ON SCHEMA public TO postgres;
GRANT ALL ON SCHEMA public TO public;
COMMENT ON SCHEMA public IS 'standard public schema';
"""
)
Run Code Online (Sandbox Code Playgroud)
不幸的是,此检查还检测到非 Heroku CI 环境,例如 Travis 或 GitLab CI,并尝试使用上述配置。
您可以通过禁用 Heroku 测试运行程序来解决此问题,如下所示settings.py:
# Configure Django App for Heroku.
django_heroku.settings(locals(), test_runner=False)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1337 次 |
| 最近记录: |