首页 > 解决方案 > 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 flushetc ..

有任何想法吗。提前致谢

编辑,这就是我在 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 也被设置。

标签: pythondjangopython-3.xvirtualenvpythonanywhere

解决方案


您需要设置一个环境变量,类似于:

$ export APO_DB_HOST=localhost

推荐阅读