Bri*_*ach 7 python configuration ini flask
我知道之前已经讨论过这个问题,但我很难找到如何在本地开发和生产服务器之间进行配置的明星解释.
到目前为止我做了什么:我有一个my_app_config.py文件,其中有一个部分包含机器/场景(测试与生产)部分我可以注释掉.我将使用我的本地机器路径硬编码,测试数据库连接字符串,我的测试电子表格位置等.当需要将代码部署到服务器时,我注释掉"测试"部分并取消注释"生产部分".正如你可能猜到的那样,这是错误的.
我最近采用了Python ConfigParser库来使用.ini文件.现在,我的代码中有以下几行
import ConfigParser
config = ConfigParser.RawConfigParser()
config.read(os.path.abspath(os.path.join(os.path.dirname( __file__ ), '..', 'settings',
'my_app_config.ini')))
database_connect_string_admin = config.get('Database', 'admin_str')
Run Code Online (Sandbox Code Playgroud)
这个问题很多......
my_app_config.ini不能改变.所以,我依赖文件内容中的注释.ini来知道我正在处理哪一个.它们存储在文件夹树中,所以我知道哪个是哪个.我尝试在程序开头设置环境变量,但所有模块的所有导入都会在代码启动时立即执行.我左右都有"未找到"的错误.
我想要的:了解如何将所有配置保存在一个不容易忘记我正在做的事情的地方.我想要一个简单的方法来保持这些配置文件(理想情况下是一个文件或脚本)在版本控制下(安全性是另一个问题,我离题).我希望能够无缝切换上下文(本地测试,本地生产,服务器测试,服务器生产,服务器B测试,服务器B生产)我的应用程序使用
my_app_config.ini 由我的解析器读取uwsgi.ini 由uwsgi应用服务器皇帝读取web_config.py 烧瓶应用使用nginx.conf 符号链接到Web服务器的配置celery 组态更不用说一切的不同路径(理想情况下在魔法配置处理精灵中处理).我想,一旦我想到这一点,我会感到很尴尬,需要很长时间才能掌握.
环境变量是我在这里尝试做的吗?
你必须尝试“简单设置”。它将解决你所有的问题。设置环境变量的一种方法
开发中
$ export SIMPLE_SETTINGS=settings.general,settings.development
$ python app.py
Run Code Online (Sandbox Code Playgroud)
生产中
$ export SIMPLE_SETTINGS=settings.general,settings.production
$ python app.py
Run Code Online (Sandbox Code Playgroud)
and出于安全原因,您可以将“development.py production.py”保留在存储库中。
例子
设置/常规.py
SIMPLE_CONF = 'simple'
Run Code Online (Sandbox Code Playgroud)
应用程序.py
from simple_settings import settings
print(settings.SIMPLE_CONF)
Run Code Online (Sandbox Code Playgroud)
该文档指出了更多的功能和优点。