我有一个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,或我需要找到另一个主机?
发布于 2018-09-18 11:52:20
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>',
)发布于 2018-09-18 03:04:24
您可以将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()记住将heroku中的DJANGO_SETTINGS_MODULE更改为settings.heroku
发布于 2018-09-18 04:08:18
一个非常有用的方法是使用吉安戈-环境并在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是部署项目的一个很好的选择。
https://stackoverflow.com/questions/52378074
复制相似问题