简介:
我就是个半吊子程序员。在单位写点程序,在家也写点程序。
单位是企业网,不能上互联网,家里也没办法连上企业网,没有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段。