簡體   English   中英

如何在Heroku上連接到MySQL?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM