连接Django到Heroku Postgres数据库

问题描述:

我已经添加了一个Postgres数据库到我的Heroku应用程序,并且试图将我的Django应用程序连接到它。但是,我的应用程序始终连接到本地Postgres数据库。连接Django到Heroku 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数据库而不是本地数据库?

+0

你能否确认你的代码实际上看到了'DATABASE_URL'环境变量,如'import os; print os.environ ['DATABASE_URL']'?只需在'db_from_env'变量之前放置它,重新启动服务器并检查输出。 – VeGABAU

+0

它抛出一个KeyError;似乎并没有真正看到它。我以为dj_database_url.config()应该读取.env文件并在那里获取DATABASE_URL值? 如果我导出'DATABASE_URL'= postgres:blahblah,它似乎工作,但我无法弄清楚为什么它不会与只在.env – HLH

+0

如果你真的想存储你的env变量.env文件,可能考虑使用'https:// github.com/theskumar/python-dotenv'。 – VeGABAU

您可以设置您的设置,以便在开发过程中从本地数据库读取数据,并在生产中使用您的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)。我希望这是可以理解的。