繁体   English   中英

将Django连接到实时的Heroku Postgres数据库

[英]Connect Django to live Heroku Postgres database

我已将Postgres数据库添加到我的Heroku应用程序中,并试图将Django应用程序连接到该数据库。 但是,我的应用程序始终连接到本地Postgres数据库。

settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'app_db',
        'USER': 'admin',
        'PASSWORD': '',
        'HOST': 'localhost',
        'PORT': '',
    }
}

db_from_env = dj_database_url.config(conn_max_age=500)
DATABASES['default'].update(db_from_env)

我已将.env文件中的'DATABASE_URL'设置为Heroku应用程序上Postgres数据库的URL,但似乎没有更新数据库。 如何强制我的应用连接到Heroku数据库而不是本地数据库?

您可以设置设置以在开发时从本地数据库读取,并在生产中使用Heroku DB。 首先,您可能已经知道,需要dj_database_url

您可以创建一个名为local_settings.py的单独的设置文件,并在其中包含您的常规数据库配置(例如,默认的Django数据库配置)。 并在您的settings.py

DATABASES = {
    'default': dj_database_url.config()
}

并且在您settings.py的底部:

# Tries to import local settings, if on dev, 
# import everything in local_Settings, which overrides the dj_database_url
# If on deploy, local_settings won't be found so just ignore the ImportError
try:
    from .local_settings import *
except ImportError:
    pass

因此,您的local_settings.py应该位于开发服务器中,而不是Heroku应用程序中(您可以忽略它,将其添加到.gitignore中)。 我希望这是可以理解的。

从本地Django代码连接到Live heroku DB,而无需手动设置DATABASE_URL env变量:

将以下代码放入settings.py文件中

import os, subprocess, dj_database_url

bashCommand = “heroku config:get DATABASE_URL -a app_name” #Use your app_name

output = subprocess.check_output([‘bash’,’-c’, bashCommand]).decode(“utf-8”) # executing the bash command and converting byte to string

DATABASES[‘default’] = dj_database_url.config(default=output,conn_max_age=600, ssl_require=True) #making connection to heroku DB without having to set DATABASE_URL env variable

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM