python - Django 对任何命令抛出错误:AttributeError: 'NoneType' object has no attribute 'startswith'
问题描述
我将我的 Django 应用程序部署到 PythonAnywhere。我需要在他们的控制台中运行一些命令。我使用命令创建了虚拟环境:
mkvirtualenv --python=/usr/bin/python3.6 venv
然后我安装了我所有的依赖项(包括 Django)
pip install -r requirements.txt
之后,我想使用命令迁移我的数据库:
python manage.py migrate
我得到这个回溯:
File "manage.py", line 21, in <module>
main()
File "manage.py", line 17, in main
execute_from_command_line(sys.argv)
File "/home/mkwiatek770/.virtualenvs/venv/lib/python3.6/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
utility.execute()
File "/home/mkwiatek770/.virtualenvs/venv/lib/python3.6/site-packages/django/core/management/__init__.py", line 375, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/mkwiatek770/.virtualenvs/venv/lib/python3.6/site-packages/django/core/management/base.py", line 323, in run_from_argv
self.execute(*args, **cmd_options)
File "/home/mkwiatek770/.virtualenvs/venv/lib/python3.6/site-packages/django/core/management/base.py", line 361, in execute
self.check()
File "/home/mkwiatek770/.virtualenvs/venv/lib/python3.6/site-packages/django/core/management/base.py", line 390, in check
include_deployment_checks=include_deployment_checks,
File "/home/mkwiatek770/.virtualenvs/venv/lib/python3.6/site-packages/django/core/management/commands/migrate.py", line 64, in _run_checks
issues = run_checks(tags=[Tags.database])
File "/home/mkwiatek770/.virtualenvs/venv/lib/python3.6/site-packages/django/core/checks/registry.py", line 72, in run_checks
new_errors = check(app_configs=app_configs)
File "/home/mkwiatek770/.virtualenvs/venv/lib/python3.6/site-packages/django/core/checks/database.py", line 10, in check_database_backends
issues.extend(conn.validation.check(**kwargs))
File "/home/mkwiatek770/.virtualenvs/venv/lib/python3.6/site-packages/django/db/backends/mysql/validation.py", line 9, in check
issues.extend(self._check_sql_mode(**kwargs))
File "/home/mkwiatek770/.virtualenvs/venv/lib/python3.6/site-packages/django/db/backends/mysql/validation.py", line 13, in _check_sql_mode
with self.connection.cursor() as cursor:
File "/home/mkwiatek770/.virtualenvs/venv/lib/python3.6/site-packages/django/db/backends/base/base.py", line 256, in cursor
return self._cursor()
File "/home/mkwiatek770/.virtualenvs/venv/lib/python3.6/site-packages/django/db/backends/base/base.py", line 233, in _cursor
self.ensure_connection()
File "/home/mkwiatek770/.virtualenvs/venv/lib/python3.6/site-packages/django/db/backends/base/base.py", line 217, in ensure_connection
self.connect()
File "/home/mkwiatek770/.virtualenvs/venv/lib/python3.6/site-packages/django/db/backends/base/base.py", line 194, in connect
conn_params = self.get_connection_params()
File "/home/mkwiatek770/.virtualenvs/venv/lib/python3.6/site-packages/django/db/backends/mysql/base.py", line 201, in get_connection_params
if settings_dict['HOST'].startswith('/'):
AttributeError: 'NoneType' object has no attribute 'startswith'
顺便说一句,它发生在每个 django 命令上,比如python manage.py flush
etc ..
有任何想法吗。提前致谢
编辑,这就是我在 settings.py 中的 DATABASE 配置:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': os.environ.get("APO_DB_NAME"),
'USER': os.environ.get("APO_DB_USER"),
'PASSWORD': os.environ.get("APO_DB_PASSWORD"),
'HOST': os.environ.get("APO_DB_HOST"),
'PORT': '3306',
'OPTIONS': {
'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
},
'TEST': {
},
}
}
if os.environ.get("COGNITO_PRODUCTION"):
DATABASES["default"]["TEST"]["NAME"] = os.environ.get("APO_DB_TEST_NAME")
我在 wsgi.py 文件中设置了所有环境变量。APO_DB_HOST 也被设置。
解决方案
您需要设置一个环境变量,类似于:
$ export APO_DB_HOST=localhost
推荐阅读
- prometheus - 为什么普罗米修斯需要这么长时间才能获得统计数据?
- python - Pandas pct_change 仅在数据框中的一列上创建新列
- java - 如何让 Java 程序长时间重复相同的步骤?
- antiforgerytoken - 非浏览器的 ABP 防伪问题
- python - 是否可以通过忽略函数的注释、格式和名称来检查两个函数的源代码是否相等?
- angular - 仅使用 JSON API 发送带有元数据的 POST 请求
- flutter - 在 Flutter 应用上实现应用内购买退款
- vb.net - 当我在 vb.net 中 ping 一台机器时,有没有办法可以处理没有找到主机的错误?
- c# - 如果子字符串包含在引用字符串中,如何使用布尔表达式进行匹配?
- javascript - 点击后如何从URL保存文件?