如何连接到heroku上的mysql?

u91tlkcl  于 2021-06-21  发布在  Mysql
关注(0)|答案(3)|浏览(303)

我有一个django项目,它使用mysql作为数据库。在我的开发机器上,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一起工作,或者我需要找另一个主持人?

7fyelxc5

7fyelxc51#

Juanmidalgo的答案是一个很好的开始,可以推广到任意环境变量。但如果只关心数据库变量,还有另一种解决方案。
默认情况下,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>',
)
gev0vcfq

gev0vcfq2#

一个非常有用的方法是使用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是部署您的项目的一个非常好的选择。

aiazj4mn

aiazj4mn3#

可以将settings.py升级到包。像这样创建设置文件夹

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

保留base.py作为settings.py,然后根据env更改所需内容。
你的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()

记得换衣服 DJANGO_SETTINGS_MODULE 在heroku到 settings.heroku

相关问题