基于阶段的条件(dev,qual,prod)

时间:2018-10-23 07:42:10

标签: python development-environment production-environment

在我看来,系统有一个阶段。一个系统可以是生产系统,质量保证系统或开发系统。

我知道应该避免基于阶段的条件,并且在测试中应该使用模拟更改事物。例如,在单元测试期间第三方系统不可用,应使用模拟来伪造第三方系统的存在。

但是有时候我有这样的条件:

if settings.STAGE == constants.STAGE_DEV:
    ....

到目前为止constants来自我们的旧图书馆。

我想使用尽可能多的开源解决方案,并避免自己编写基本的东西。

有没有比使用上述本地解决方案更好的方法?

马丁·彼得斯说:

  

那是因为也没有一种“千篇一律”的配置解决方案。而且永远也不会。

这让我感到难过。我仍然希望将来会出现“最低公分母”。

1 个答案:

答案 0 :(得分:1)

我认为您应该考虑改变轨道。虽然环境的概念(我通常将其称为ENV)在部署脚本,启动脚本,Dockerfile等中很常见且很有用,但将它们包含在应用程序代码中肯定会造成麻烦。

更好的解决方案是让您的启动脚本了解环境并配置(或切换)特定功能。

例如,

if settings.smtp_configured:
    send_email()

然后在您的启动脚本中,切换功能。有时在settings.py文件中执行此逻辑可能很有用,但我不希望这样做,因为每次环境变化时我都必须对其进行修改。这完全取决于您的应用程序如何部署。