2016-11-18 59 views
1

我從Django開始作爲一個愛好項目開始。到目前爲止,我很高興與SQLite合作,無論是在開發中(即使用py manage.py runserver)還是在部署中(在Nginx + uWSGI上)。現在我還想學習使用更強大的PostgreSQL數據庫。但是,如果可能的話,我想跳過本地安裝,以避免在Windows上安裝Postgres。Django本地使用SQLite和服務器上的Postgres

我想知道是否有可能,通過Django,每當我在部署中使用內置服務器和Postgres而不更改項目代碼時,都可以使用SQLite。找不到如何做到這一點。

我可以使用解決方法,並使我的部署過程每次部署時更改服務器上的設置。但這是一種破解。

+1

只需在開發機器上安裝PostgreSQL。這樣,您可以採取生產數據並在本地複製和調試問題。 – allcaps

+0

在開發/測試和生產中使用不同的堆棧是一個壞主意。 Django不會爲你處理好數據庫之間的差異很大,所以你一定會遇到生產中不會發生的問題。 –

+0

@mu_is_too_short,謝謝你的擡頭。我的測試也在服務器上完成,因此它與生產配置幾乎相同。同樣對於這個項目來說,模型非常簡單,所以我希望Django能夠管理。我會盡快注意問題,並儘快切換。我甚至認爲已經使用SQLite進行生產,以保持等價。 – texnic

回答

2

您可以將您的settings.py分成多個設置文件,例如

[projectname]/ 
├── [projectname]/ 
│ ├── __init__.py 
│ ├── settings/ 
│ │ │── base.py 
│ │ │── development.py 
│ │ │── production.py 
│ ├── urls.py 
│ └── wsgi.py 
└── manage.py 

您的base.py包括您當前settings.py中的所有代碼。指定您development.py(sqlite3的),並且在production.py(PostgreSQL系統)不同的數據庫,並在每個

from .base import * 

最後導入base.py但並非最不重要,你必須知道哪些文件應該使用Django。添加

export DJANGO_SETTINGS_MODULE="projectname.settings.development" 

你你的virtualenv的postactivate開發服務器和生產服務器上

export DJANGO_SETTINGS_MODULE="projectname.settings.production" 

。別忘了

unset DJANGO_SETTINGS_MODULE 

在您的預先激活。

更多的信息在這裏:http://www.marinamele.com/taskbuster-django-tutorial/settings-different-environments-version-control btw。有很多最佳實踐的偉大的教程

1

__init__.py

import os 

app_stage = os.environ.get('DJANGO_APP_STAGE', 'dev') 
if app_stage == 'prod': 
    from .production import * 
else: 
    from .development import * 

而且隨着

settings/ 
    │── __init__.py 
    │── base.py 
    │── development.py 
    │── production.py 

更換settings.py最後當你製作啓動應用程序,請確保您設置env DJANGO_APP_STAGE='prod'

在相應的文件中創建數據庫設置,你很好。

相關問題