Skip to content

Instantly share code, notes, and snippets.

@Junzki
Created February 10, 2018 13:04
Show Gist options
  • Save Junzki/57d00901c92954e3a3f2dac96c6a9cc6 to your computer and use it in GitHub Desktop.
Save Junzki/57d00901c92954e3a3f2dac96c6a9cc6 to your computer and use it in GitHub Desktop.

设置独立的生产环境

1. 原理

Django 在加载 settings 的时候会根据环境变量选择不同的 settings

参考 manage.py +6os.environ.setdefault 设置了一个名为 DJANGO_SETTINGS_MODULE、值为目标 settings 的环境变量。

在生产环境中,uWSGI 会根据指定的 WSGI Module 加载程序。Djangowsgi.py 中同样执行了 os.environ.setdefault

2. 方案

  1. settings.py 的同级目录创建一个新的 Python 文件,例如 prd.py
  2. 按照如下示例编写 prd.py 的内容。
# -*- coding:utf-8 -*-
from .settings import *

# Write your settings below.
# For example:

SECRET_KEY = 'your-secret-key'

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'HOST': 'your-db-host',
        'PORT': '3306',
        'NAME': 'your-db-name',
        'USER': 'your-db-user',
        'PASSWORD': 'your-db-password',
        'OPTIONS': {
            'charset': 'utf8mb4'
        }
    }
}

你可以根据需要写入各类配置。未在此处写出的配置会从 Django 的默认值以及 settings.py 继承过来。

  1. 修改 wsgi.py +14,将 settings 替换成你的 prd。 更好的建议是复制一份 wsgi.py 再改(当然,uWSGI 的配置文件也要进行相应的修改)。

  2. 不要忘记将线上相关的配置加入你的 .gitignore

3. 对于本地的开发环境呢?

原理是一样的,你可以创建一个 local_settings.py 嘛。
manage.py 有一个 --settings 的参数,值是你的 local_settings,就像这样:

$ python manage.py runserver --settings=your_project.local_settings

当然,你也可以照葫芦画瓢搞一个新的 local_manage.py

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment