将Django连接到Heroku Postgres数据库

时间:2017-04-17 20:35:04

标签: python django postgresql heroku

我已经在我的Heroku应用程序中添加了一个Postgres数据库,并且我正在尝试将我的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数据库而不是本地数据库?

2 个答案:

答案 0 :(得分:3)

您可以将设置设置为在开发时从本地数据库中读取,并在生产中使用Heroku数据库。首先,您可能已经知道,您需要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)。我希望这是可以理解的。

答案 1 :(得分:0)

从本地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