从零开始自动部署Django项目(一):开发配置与生产配置

引言

作为一只后端工程师,经常会碰到本地开发环境跟远程服务器生产环境配置不一样的情况,比如说本地数据库使用的是SQLite,而在远程上的数据库用的却是Mysql。
对于一些小的修改,比如数据库的密码不一样之类的,当然可以选择直接SSH登录上服务器然后开VIM修改,但是我觉得这并非一个“懒惰”的工程师的追求。
接下来我将介绍两种方法来部署不同配置的Django。当然,既然是不同的环境,两份配置文件是必须的。

准备

新建一个Django项目settingsTest,并准备两份不同的settings:

├── manage.py
└── settingsTest
    ├── __init__.py
    ├── dev_settings.py
    ├── pro_settings.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py

在manage.py中,django已经自动设置了读取的配置模块,当然这是可以修改的。

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settingsTest.settings")

从默认的settings中导入不同配置

在这里我不打算修改django的默认配置模块,我选择了在settingsTest.settings中导入dev_settings.py或者pro_settings.py的配置,但是如何辨别当前环境是生产环境还是开发环境呢?答案是通过设置一个生产环境才有的环境变量,然后在settings.py中判断这个环境变量的存在与否来决定导入哪一份配置。
值得注意的是,settings.py本身是一个py模块,因此在里面添加if语句是可以允许的。(详细查阅:Django Settings)

# settings.py
import os
## Default settings
## Shared settings between development and production

if os.environ.get('DJANGO_PRODUCTION_SETTINGS', None):
    from .pro_settings import *
else:
    from .dev_settings import *

在运行时指定不同的settings模块

manage.py在运行时还提供了–settings选项用于指定settings模块,因此用于启动django自带的debug服务器还是挺方便的。当然,如果是使用诸如uwsgi之类的生产服务器就应该通过修改manage.py中的DJANGO_SETTINGS_MODULE环境变量来实现。

python manage.py rumserver 0.0.0.0:8000 --settings=settingsTest.pro_settings

这里有stack overflow的传送门:How to manage local vs production settings in Django?

你可能感兴趣的:(Django)