我有一个使用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进行此操作,还是需要寻找其他主机?
答案 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