首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何连接到Heroku上的MySQL?

如何连接到Heroku上的MySQL?
EN

Stack Overflow用户
提问于 2018-09-18 02:31:03
回答 3查看 5.8K关注 0票数 1

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

代码语言:javascript
复制
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,或我需要找到另一个主机?

EN

回答 3

Stack Overflow用户

发布于 2018-09-18 11:52:20

juanmhidalgo的回答是一个很好的开端,可以对任意环境变量进行推广。但是,如果您只关心数据库变量,还有另一种解决方案。

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

据我所知,各种MySQL加载项也设置了这个变量,但是知道您选择了哪个变量会有帮助,这样我们就可以确认了。它可能需要根据另一个环境变量手动设置。

假设正确设置了DATABASE_URL环境变量,您可以使用dj-database-url直接设置数据库,还可以在settings.py文件中提供在变量不可用(例如在开发框中)时使用的回退:

代码语言:javascript
复制
import dj_database_url

DATABASES['default'] = dj_database_url.config(
    default='mysql://root:<password>@localhost:3306/<database>',
)
票数 2
EN

Stack Overflow用户

发布于 2018-09-18 03:04:24

您可以将settings.py提升到包。创建像下面这样的设置文件夹

代码语言:javascript
复制
settings/
├── __init__.py
├── base.py
├── dev.py
├── heroku.py

保持base.py作为您的settings.py,然后根据env更改所需的内容。

你的heroku.py可能是

代码语言:javascript
复制
from .base import *

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

重要的是告诉部署版本使用新设置。检查wsgi.py

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2018-09-18 04:08:18

一个非常有用的方法是使用吉安戈-环境并在heroku设置上设置配置选项。

代码语言:javascript
复制
# 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(),

}

您的环境变量如下:

代码语言:javascript
复制
DATABASE_URL=mysql://user:%23password@127.0.0.1:3306/dbname

关于您的问题,Heroku是部署项目的一个很好的选择。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52378074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档