自动部署Django项目详解

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

Ubuntu 14.04下Django+MySQL安装部署全过程

Django1.8返回json字符串和接收post的json字符串内容 

如何使用 Docker 组件开发 Django 项目? 

Ubuntu Server 12.04 安装Nginx+uWSGI+Django环境  

Django+Nginx+uWSGI 部署  

Django实战教程  

Django Python MySQL Linux 开发环境搭建  

准备

新建一个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?

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/0c92a39958122c372d5deaf8b6be9c2a.html