我知道之前已经讨论过这个问题,但我正在努力寻找关于如何在本地开发和生产服务器之间进行配置的清晰明了的解释。
到目前为止我做了什么:我有一个 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')
这个问题很多...
- 我需要在每个文件的顶部导入
- 文件名
my_app_config.ini
不能更改。因此,我依靠.ini
文件的 content 中的注释来了解我正在处理的是哪一个。它们存储在文件夹树中,所以我知道哪个是哪个。 - 注意这里定义了配置文件的路径。因此,取决于 python 文件在树结构中的位置决定了我是否会收到复制/粘贴错误。
我尝试在程序开始时设置环境变量,但所有模块的所有导入都在代码启动时立即执行。我不断收到“未找到”错误。
我想要的:了解如何将所有配置存储在一个地方,这样就不容易忘记我在做什么。我想要一种简单的方法来将这些配置文件(最好是一个文件或脚本)置于版本控制之下(安全性是另一个问题,我离题了)。我希望能够无缝切换上下文(本地测试、本地生产、serverA 测试、serverA 生产、serverB 测试、serverB 生产)我的应用程序使用
my_app_config.ini
由我的解析器读取uwsgi.ini
uwsgi应用服务器皇帝读取web_config.py
由 flask 应用程序使用nginx.conf
符号链接(symbolic link)到 Web 服务器的配置celery
配置
更不用说所有东西的不同路径(最好在魔术配置处理 Sprite 中处理)。我想一旦我弄明白了这一点,我会为花了这么长时间才掌握而感到尴尬。
环境变量是我在这里尝试做的吗?
最佳答案
你必须尝试`simple-settings .它将解决您所有的问题。一种设置环境变量的方法
开发中
$ export SIMPLE_SETTINGS=settings.general,settings.development
$ python app.py
生产中
$ export SIMPLE_SETTINGS=settings.general,settings.production
$ python app.py
出于安全原因,您可以将“development.py和
production.py”保留在存储库中。
例子
设置/通用.py
SIMPLE_CONF = 'simple'
应用.py
from simple_settings import settings
print(settings.SIMPLE_CONF)
文档指出了更多的特性和优势。
关于Python 应用配置最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26999101/