Как я могу подключиться к MySQL на Heroku? - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть проект Django, который использует MySQL в качестве своей базы данных.На моей машине разработки база данных MySQL работает на моей локальной машине, как показано здесь:

DATABASES = {

    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'xxx',
        'USER': 'root',
        'PASSWORD': 'xxxx',
        'HOST': 'localhost',
        #'PORT': '3306',
    }
}

Я успешно развернул проект в Heroku, но он продолжает показывать, что

2003,"Невозможно подключиться к серверу MySQL на 'localhost' ([Errno 111] Соединение отклонено)

, поскольку настройка - это локальный MySQL, а views.py содержит функции, которые импортируют локальную базу данных. Я до сих порНе могу понять, как сделать так, чтобы сайт подключался к этой базе данных.

Есть ли способ заставить эту работу работать с Heroku, или мне нужно найти другой хост?

Ответы [ 3 ]

0 голосов
/ 18 сентября 2018

Действительно полезный способ сделать это - использовать django-environment и установить опцию конфигурации в настройках heroku.

# settings.py
# Parse database connection url strings like psql://user:pass@127.0.0.1:8458/db
DATABASES = {
    # read os.environ['DATABASE_URL'] and raises ImproperlyConfigured exception if not found
    'default': env.db(),

}

и вашу переменную окружения, например:

DATABASE_URL=mysql://user:%23password@127.0.0.1:3306/dbname

Что касается вашего вопроса, Heroku - действительно хороший вариант для развертывания ваших проектов.

0 голосов
/ 18 сентября 2018

ответ juanmhidalgo - хорошее начало, и его можно обобщить для произвольных переменных среды.Но если вас заботит только переменная базы данных, есть другое решение.

По умолчанию Heroku предоставляет базу данных PostgreSQL и устанавливает для вашего приложения DATABASE_URL строку подключения, которую можно использовать для подключения к ней.

Насколько я знаю, различные аддоны MySQL также устанавливают эту переменную, но было бы полезно узнать, какую из них вы выбрали, чтобы мы могли подтвердить.Возможно, его нужно будет установить вручную, основываясь на другой переменной среды.

При условии, что переменная окружения DATABASE_URL установлена ​​правильно, вы можете использовать dj-database-url для непосредственной настройки вашей базы данных,опционально предоставляя запасной вариант для использования, когда переменная недоступна (например, в вашей коробке разработки), в вашем файле settings.py:

import dj_database_url

DATABASES['default'] = dj_database_url.config(
    default='mysql://root:<password>@localhost:3306/<database>',
)
0 голосов
/ 18 сентября 2018

Вы можете рекламировать settings.py в пакет.Создайте папку с настройками, подобную этой

settings/
├── __init__.py
├── base.py
├── dev.py
├── heroku.py

Сохраните base.py в качестве вашего settings.py, а затем, в зависимости от env, измените то, что вам нужно.

Ваш heroku.py можетbe

from .base import *

DATABASE = {
    # change to use the database on heroku
}

Важно сообщить версии развертывания, чтобы использовать новые настройки.Проверьте wsgi.py

import os

from django.core.wsgi import get_wsgi_application

# point to the new settings.dev as default, if the `DJANGO_SETTINGS_MODULE`
# is not set
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings.dev")
application = get_wsgi_application()

Не забудьте изменить DJANGO_SETTINGS_MODULE в Heroku на settings.heroku

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...