django - 使用 PyCharm 在 Docker 容器内使用 Django 运行测试用例时出错 (AppRegistryNotReady)
问题描述
我阅读了此处发布的类似解决方案:
我已经实施了上述解决方案。奇怪的是我可以在 PyCharm 中打开一个 Django 控制台而不会出错。我已经通过执行以下命令确认 Django 控制台正在我的 Docker 容器中运行:
>>> import socket
>>> socket.gethostname()
'f6f418ce5d14'
我有一个入口点脚本(bash 脚本),它在 Docker 容器内执行以下操作而不会出错:
python manage.py migrate
python manage.py loaddata --format json /srv/app/api/opp/management/fixtures/dev.json
但是,当 PyCharm 尝试使用 PyCharm 自己的鼻子测试运行器执行测试用例时,就会出现错误。以下是使用 Docker 容器运行 Django 测试用例时 PyCharm 输出的摘录:
app_1 | Installed 127 object(s) from 1 fixture(s)
app_1 | app_1 | Launching Nosetest with arguments /opt/.pycharm_helpers/pycharm/_jb_nosetest_runner.py /srv/app/api/opp/tests in /srv/app/api
app_1 |
app_1 | app_1 | app_1 | app_1 | app_1 | app_1 | app_1 | app_1 |
error in setup context
Traceback (most recent call last):
File "/usr/local/lib/python3.8/site-packages/nose/suite.py", line 210, in run
self.setUp()
File "/usr/local/lib/python3.8/site-packages/nose/suite.py", line 293, in setUp
self.setupContext(ancestor)
File "/usr/local/lib/python3.8/site-packages/nose/suite.py", line 316, in setupContext
try_run(context, names)
File "/usr/local/lib/python3.8/site-packages/nose/util.py", line 471, in try_run
return func()
File "/usr/local/lib/python3.8/site-packages/django/test/testcases.py", line 1131, in setUpClass
call_command('loaddata', *cls.fixtures, **{'verbosity': 0, 'database': db_name})
File "/usr/local/lib/python3.8/site-packages/django/core/management/__init__.py", line 102, in call_command
app_name = get_commands()[command_name]
File "/usr/local/lib/python3.8/site-packages/django/core/management/__init__.py", line 68, in get_commands
for app_config in reversed(list(apps.get_app_configs())):
File "/usr/local/lib/python3.8/site-packages/django/apps/registry.py", line 144, in get_app_configs
self.check_apps_ready()
File "/usr/local/lib/python3.8/site-packages/django/apps/registry.py", line 135, in check_apps_ready
raise AppRegistryNotReady("Apps aren't loaded yet.")
django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.
似乎是 PyCharm 提供的测试运行程序导致了这个问题。根据我看到的输出,我相信 PyCharm 测试运行器在运行测试用例之前没有执行以下命令:
import django
django.setup()
我试图找到在 Docker 容器内运行的 PyCharm 测试,以便我可以手动编辑它。但是,我找不到它。帮帮我欧比旺卡诺比,你是我唯一的希望!
解决方案
今天我逐行浏览了我的 Dockerfile 和 docker-compose.yaml 文件。我发现有一些与 Docker 和 PyCharm 完全无关的问题。我从一位同事那里复制了一些其他的 Bash 配置脚本。事实证明,问题在于没有安装所有正确的 alpine 软件包,并且在设置 Bash 变量时有两个额外的空格。例如,而不是这个错误的行:
VARIABLE = "some value"
我应该有:
VARIABLE = "some value"
不用说,错过了如此微不足道的事情,我觉得有点愚蠢。但是,当时我还不知道如何解决 python:3-alpine 映像中的 Docker 问题。我在这里发布我的答案/非答案,以防其他一些像我一样被误导的灵魂可能会觉得它有用。
推荐阅读
- cloudera - Errno 14 PYCURL 错误 6 ;在 Cloudera Manager 7.x 升级中无法解析主机
- javascript - 页面加载到容器中时 UI 滑块不可见
- python - 使用 Seleliu 导入文件
- scala - 如何在处理速率限制时异步发送 HTTP 请求?
- mongodb - 将聚合的结果作为对象而不是数组返回
- spring - log4j2 不在登台机器上生成日志
- ruby-on-rails - Rails 6 Active Storage:Digital Ocean Spaces 不支持公共读取 ACL
- javascript - 通过 wordpress 中的脚本切换 div
- xml - NiFi xml试图分离具有半结构化数据的文本节点
- c++ - 我可以在 if 语句中枚举变量吗?