如何在Heroku上连接到MySQL?

时间:2018-09-18 02:31:03

标签: python mysql django heroku

我有一个使用MySQL作为数据库的Django项目。在我的开发计算机上,MySQL数据库在本地计算机上运行,​​如下所示:

DATABASES = {

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

我已经成功地将项目部署到了​​Heroku,但是它一直在显示

  

2003,“无法连接到'localhost'上的MySQL服务器([Errno 111]连接被拒绝)

因为该设置是本地MySQL,并且views.py包含导入本地数据库的函数。我仍然不知道如何将网站连接到该数据库。

是否可以通过Heroku进行此操作,还是需要寻找其他主机?

3 个答案:

答案 0 :(得分:1)

您可以将settings.py升级为软件包。创建这样的设置文件夹

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

将base.py保留为settings.py,然后根据环境更改所需内容。

您的heroku.py可能是

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()

请记住,将heroku中的DJANGO_SETTINGS_MODULE更改为settings.heroku

答案 1 :(得分:1)

一种非常有用的方法是使用django-environ并在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是部署项目的不错选择。

答案 2 :(得分:1)

juanmhidalgo's answer是一个好的开始,可以推广到任意环境变量。但是,如果您只关心数据库变量,那么还有另一种解决方案。

默认情况下,Heroku提供PostgreSQL数据库,并使用可用于连接到它的连接字符串设置应用程序的Url

据我所知,各种MySQL插件也都设置了该变量,但是知道您选择了哪个变量会有所帮助,以便我们进行确认。可能需要根据另一个环境变量手动设置它。

假设正确设置了DataContext环境变量,则可以使用dj-database-url直接设置数据库,还可以选择在变量不可用时提供备用供使用(例如,在开发箱上) ),放在您的DataGrid文件中:

MainCustomObjectList