Как решить ошибку приложения на heroku?
Я пытаюсь создать приложение на django и пытаюсь разместить его на heroku. Локально все работает отлично. Я получаю ошибку при попытке перенести базу данных на приложение heroku, выполнив команду -
heroku run python manage.py migrate
Это ошибка, которую я получаю -
settings.py -
prod_db = dj_database_url.config(conn_max_age=500)
DATABASES['default'].update(prod_db)
Как я могу решить этот вопрос? Пожалуйста, спросите, нужно ли добавить какие-либо мои файлы к вопросу.
Вы используете MySQL для локальной разработки и PostgreSQL в производстве. Соединение с PostgreSQL происходит из переменной окружения DATABASE_URL, которую dj_database_url использует по умолчанию.
Поскольку вы обновляете базу данных по умолчанию из среды (а не заменяете ее), специфичная для MySQL опция init_command остается в конфигурации PostgreSQL. Драйвер PostgreSQL psycopg2 не знает, что с ним делать.
Я сильно настоятельно рекомендую вам использовать один и тот же сервер баз данных для разработки и производства. Как вы уже поняли, движки баз данных не заменяют друг друга. В данном случае, вероятно, проще всего перейти с PostgreSQL на MySQL на Heroku.
Сначала избавимся от вещей Postgres:
- Удалите
psycopg2из ваших зависимостей. Его наличие , вероятно, привело к тому, что Heroku автоматически предоставил вам базу данных PostgreSQL, что внесло дополнительную путаницу. - Как вариант, удалите существующую базу данных Postgres. Возможно, это бесплатная версия, поэтому она вам ничего не стоит, но немного странно, что она висит где-то рядом, если вы используете совершенно другой сервер баз данных.
Теперь установите сервер MySQL. Я предлагаю вам выбрать из доступных аддонов. Есть несколько вариантов MySQL, включая JawsDB и ClearDB. Вот пример использования ClearDB:
heroku addons:create cleardb:ignite
Ignite - это бесплатный уровень для ClearDB. После инициализации ваше приложение увидит новую переменную окружения CLEARDB_DATABASE_URL. Другие аддоны будут использовать другие имена переменных окружения, поэтому обязательно ознакомьтесь с их документацией.
Наконец, обновите конфигурацию Django. dj_database_url по умолчанию использует переменную окружения DATABASE_URL, но мы можем указать ей использовать другую переменную:
prod_db = dj_database_url.config(env="CLEARDB_DATABASE_URL", conn_max_age=500)
DATABASES['default'].update(prod_db)