2017-04-17 153 views
1

我已經添加了一個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

回答

1

您可以設置您的設置,以便在開發過程中從本地數據庫讀取數據,並在生產中使用您的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)。我希望這是可以理解的。

相關問題