管理不同环境的配置

Dor*_*nar 5 python configuration continuous-integration configuration-files continuous-deployment

我和工作中的一些人进行了讨论,我们无法得出结论。
我们遇到了两难境地——您如何为不同的环境管理不同的配置值?

我们提出了一些选项,但似乎没有一个让我们满意:
- 单独的配置文件(即config.testconfig.prod等),并有一个文件指向选定的文件(~/env例如at ),或指向一个环境变量它。
- 使用单个 DB 来存储所有配置(您在环境中查询它并获取相应的配置值)
- 在部署时创建配置文件(使用像 Atlassian Bamboo 这样的 CI/CD 系统)

哪个是更广泛使用的选项?有没有更好的办法?
配置文件是否应该与其余代码一起保存在 git 存储库中?我们的系统是用 python 编写的(2.7 和 3)

小智 7

您可以将所有这些配置放在单个配置文件 config.py 中。

class Base():
    DEBUG = False
    TESTING = False

class DevelopmentConfig(Base):
    DEBUG = True
    DEVELOPMENT = True
    DATABASE_URI = "mysql+mysqldb://root:root@localhost/demo"

class TestingConfig(Base):
    DEBUG = False
    TESTING = True
    DATABASE_URI = "mysql+mysqldb://root:root@test_server_host_name/demo_test"

class ProductionConfig(Base):
    DEBUG = False
    TESTING = False
    DATABASE_URI = "mysql+mysqldb://root:root@prod_host_name/demo_prod"
Run Code Online (Sandbox Code Playgroud)

在外壳上设置环境变量,如

APP_SETTINGS = config.DevelopmentConfig

在您的主应用程序 app.py 中,加载此环境变量(以烧瓶应用程序为例)

from flask import Flask
import os

app = Flask(__name__)
app.config.from_object(os.environ['APP_SETTINGS'])
Run Code Online (Sandbox Code Playgroud)

我希望这可以帮助


Dor*_*nar 0

我们最终使用了与此类似的方法。我们有一个基本设置文件和环境特定文件,它们只是从基本文件 base.py 导入所有内容:

SAMPLE_CONFIG_VARIABLE = SAMPLE_CONFIG_VALUE
Run Code Online (Sandbox Code Playgroud)

产品.py:

from base.py import *
Run Code Online (Sandbox Code Playgroud)

因此,当从配置访问值时,我们所要做的就是读取环境变量并创建与其对应的文件。