首先添加指定环境脚本
在项目根目录下创建环境脚本 touch env.sh
并编辑
1 2 3 4 5 6 7 8 9 10 11
| #!/usr/bin/env bash
ENV=$1
if [ ! ${ENV} ] then ENV=local fi
export PYTHONPATH=./ # 项目跟目录 export FLASK_CONFIG=${ENV} # 当前环境 可选 local product dev test
|
该文件起到两个作用
1、PYTHONPATH:项目根目录。
2、FLASK_CONFIG:当前环境,使用方法
然后执行命令,使配置生效
1
| $ source env.sh ${env} # env=local|product|dev|test 默认local
|
添加环境信息文件
1 2 3 4
| $ mkdir app $ cd app $ touch local_config.py $ vim local_config.py
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| #!/usr/bin/env python # -*- coding: utf-8 -*- '''配置文件程序''' __author__ = "wxnacy([email protected])" __copyright__ = "Copyright of wxnacy (2017)."
class ProductionConfig(): DEBUG = False SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:[email protected]:3306/db_name?charset=utf8mb4'
class DevelopmentConfig(): DEBUG = True SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:[email protected]:3306/db_name?charset=utf8mb4'
class TestingConfig(): DEBUG = True
class LocalConfig(): DEBUG = True SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:[email protected]:3306/db_name?charset=utf8mb4'
|
该文件配置了各个环境数据库连接信息
添加文件config.py来根据环境读取当前环境内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| #!/usr/bin/env python # -*- coding: utf-8 -*- '''配置信息''' __author__ = "wxnacy([email protected])" __copyright__ = "Copyright of wxnacy (2017)."
from flask import Flask from werkzeug.contrib.fixers import ProxyFix import os
CONFIG_NAME_MAPPER = { 'local': 'app.local_config.LocalConfig', 'product': 'app.local_config.ProductionConfig', 'dev': 'app.local_config.DevelopmentConfig', 'test': 'app.local_config.TestingConfig' }
def create_app(flask_config_name=None): """ 创建配置 :return: """ app = Flask(__name__) app.wsgi_app = ProxyFix(app.wsgi_app) env_flask_config_name = os.getenv('FLASK_CONFIG') config_mapper_name = flask_config_name or env_flask_config_name or 'local' config_name = CONFIG_NAME_MAPPER[config_mapper_name] app.config.from_object(config_name)
return app
app = create_app()
|
修改run.py 来读取环境内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| #!/usr/bin/env python # -*- coding: utf-8 -*- '''配置信息''' __author__ = "wxnacy([email protected])" __copyright__ = "Copyright of wxnacy (2017)."
from app.config import app
@app.route('/test') def mysql(): return app.config['SQLALCHEMY_DATABASE_URI']
app.run()
|
现在项目的目录结构为
1 2 3 4 5 6
| myproject: app: config.py local_config.py run.py env.sh
|
运行
本地环境
1 2 3 4 5 6 7 8 9
| $ source env.sh $ python run.py $ curl http://localhost:5000/test mysql+pymysql://root:[email protected]:3306/db_name?charset=utf8mb4
$ source env.sh product $ python run.py $ curl http://localhost:5000/test mysql+pymysql://root:[email protected]:3306/db_name?charset=utf8mb4
|