flask 自动切换环境

简介:

我就是个半吊子程序员。在单位写点程序,在家也写点程序。

单位是企业网,不能上互联网,家里也没办法连上企业网,没有VPN。

主武器是我的笔记本电脑。在单位有一台淘汰的linux服务器,家里有个NUC做的小服务器。

偶然看到别人写的多个flask配置文件,自动切换生产环境和开发环境。

我这比它还麻烦。

单位服务器:

docker1:数据库

docker2:开发

docker3:生产

家里服务器:

docker1:数据库

docker2:开发

很久以前是直接用windows下flask的测试服务器,后来部署到linux服务器的时候,发现有些库可能因为依赖什么的原因装不上。

就开始动脑筋,经历了在笔记本上装虚拟机linux,…………一系列的折腾。

现在感觉还是让程序启动的时候自动判断环境比较好。

一:class config

在config中定义多个配置类

#环境基类
class Config(object):
    DEBUG = False
    TESTING = False
    SECRET_KEY = 'v%»lÎImyÃUѦ8#ûïÂÓÙÛ@ræD}Ó^Ì©@÷Êñïíé÷ê«!,Ü@.qr2"hÁzKeô>¦Ô¶ïÁúlAÞ'
    # SERVER_NAME = '0.0.0.0:5000'
    BABEL_DEFAULT_LOCALE = 'zh_Hans_CN'


# 生产环境
class ProductionConfig(Config):
    DATABASE_URI = 'mysql+mysqlconnector://zzcld:zzcld@mariadb/zzcld'


# 开发环境
class DevelopmentConfig(Config):
    DATABASE_URI = 'mysql+mysqlconnector://zzcld:zzcld@mariadb/zzcld_test'
    DEBUG = True


# 测试环境
class TestingConfig(Config):
    DATABASE_URI = 'sqlite://'
    TESTING = True


# 家庭环境
class HomeConfig(Config):
    DATABASE_URI = 'mysql+mysqlconnector://zzcld:zzcld@nuc/zzcld_test'
    DEBUG = True

其实主要的区别是数据库位置不一样。

二:check ip

随便找个地方,根据环境IP不同,来判断到底是在单位还是在家。

import socket

# 获取IP地址
def get_host_ip():
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        s.connect(('8.8.8.8', 80))
        ip = s.getsockname()[0]
    finally:
        s.close()
    return ip

# 检查网络地址,判断运行环境
def check_config():
    # 检查自己的IP
    ip = get_host_ip()
    ip = ip.split('.')
    ip_block = ip[0] + ip[1] + ip[2]
    if ip_block == '19216843' or ip_block == '1099108':
        conf='ethernet'
    elif ip_block == '1921681':
        conf ='home'
    elif ip[0] == '172':
        conf ='docker'
    return conf

我只取了IP的前3段或前1段。

三:

四:

五:

猜你喜欢

转载自www.cnblogs.com/jackadam/p/9807908.html