我知道之前已经讨论过这个问题,但是我很难找到如何在本地开发和生产服务器之间进行配置的明星解释。
到目前为止我做了什么:我有一个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
文件的内容中的评论来了解我正在处理哪一个。它们存储在文件夹树中,所以我知道哪个是哪个。 我尝试在程序开头设置环境变量,但所有模块的所有导入都会在代码启动时立即执行。我得到了#34;没找到"左右错误。
我想要的是什么:要了解如何将所有配置保存在一个不容易忘记我正在做的事情的地方。我想要一个简单的方法来保持这些配置文件(理想情况下是一个文件或脚本)在版本控制下(安全性是另一个问题,我离题)。我希望能够无缝切换上下文(本地测试,本地生产,服务器测试,服务器生产,服务器B测试,服务器B生产)我的应用程序使用
my_app_config.ini
由我的解析器阅读uwsgi.ini
由uwsgi应用服务器皇帝web_config.py
nginx.conf
符号链接到Web服务器的配置celery
配置更不用说一切的不同路径(理想情况下在魔法配置处理精灵中处理)。我想,一旦我想到这一点,我会感到很尴尬,需要很长时间才能掌握。
环境变量是我想要做的吗?
答案 0 :(得分:1)
你必须尝试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保留在存储库中。
实施例
设置/ general.py
SIMPLE_CONF = 'simple'
app.py
from simple_settings import settings
print(settings.SIMPLE_CONF)
文档显示了更多功能和优点。