Использование переменных среды для mysql пароля базы данных и ошибок при сбросе хоста - PullRequest
0 голосов
/ 14 марта 2020

Я пытаюсь настроить базу данных mysql и защитить конфиденциальную информацию в файле .env. Мне удалось успешно сохранить базу данных NAME, но использование переменных окружения для PASSWORD и HOST выдает две разные ошибки:

Ошибка для PASSWORD:

Exception Type: OperationalError at /
Exception Value: (1045, "Access denied for user 'studio413'@'10.0.0.32' (using password: NO)")

Ошибка для HOST:

AttributeError at /
'NoneType' object has no attribute 'startswith'

Помещение фактических PASSWORD и HOST непосредственно в settings.py работает отлично, и я считаю, что правильно настроил переменные среды, так как база данных NAME работает нормально.

Ввод echo $DATABASE_PASSWORD и echo $DATABASE_HOST в мою консоль дает правильную информацию из моего файла .env.

Я использую PythonAnywhere и следовал инструкциям для настройка переменных среды здесь: https://help.pythonanywhere.com/pages/environment-variables-for-web-apps/

Если это поможет, вот мой файл settings.py:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'studio413$default',
        'USER': os.getenv("DATABASE_USER"),
        'PASSWORD': os.getenv("DATABASE_PASSWORD"),
        'HOST': os.getenv("DATABASE_HOST"),
    }
}

Если кто-нибудь может помочь мне решить эту проблему, Я был бы очень признателен за это!

Примечание. Я пытался предоставить полный возврат для каждой ошибки, но stackoverflow не позволял мне публиковать их (он думал, что я публиковал спам).

1 Ответ

0 голосов
/ 15 марта 2020

Я выяснил проблему.

Для тех, кто сталкивается с этой проблемой в PythonAnywhere, есть два разных файла wsgi.py. Первый находится в том же каталоге, что и settings.py (с которым я работал), а другой находится на вкладке «Сеть» и связан с разделом «Код:». Последний - тот, который нужно было отредактировать. Добавление следующего к этому файлу wsgi.py (над строкой application = get_wsgi_application()) привело к правильной работе всех переменных среды:

from dotenv import load_dotenv

project_folder = os.path.expanduser('~/<insert-your-project-directory-here>')
load_dotenv(os.path.join(project_folder, '.env'))
...