[英]How can I connect to MySQL on 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使其工作,還是需要尋找其他主機?
您可以將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
一種非常有用的方法是使用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是部署項目的一個很好的選擇。
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>',
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.