如何交换生产和开发的配置文件?

时间:2016-04-19 18:23:18

标签: python git

前段时间我使用Python创建了一个脚本,该脚本将根据配置文件在实例中执行一些操作。

这是问题,我创建了2个配置文件。

Config.py

instance= <Production url>
Value1= A
Value2= B
...

TestConfig.py

instance= <Development url>
Value1= C
Value2= D
...

因此,当我希望脚本在开发实例中执行任务来进行测试时,我只需导入TestConfig.py而不是Config.py。

Main.py

# from Config import *
from TestConfig import *

当我使用git更新脚本时出现问题。如果我想在开发中运行脚本,我必须手动修改文件,这意味着我将在服务器中进行未经修改的更改。

做这个改变需要大约1分钟的时间,但我觉得我做错了。

您知道是否有完成此类任务的标准或正确方法?

4 个答案:

答案 0 :(得分:2)

使用:

try:
    from TestConfig import *
except ImportError:
    from Config import *

在制作时,删除TestConfig.py

答案 1 :(得分:1)

在您的计算机上导出环境变量,并根据该环境变量选择设置。

答案 2 :(得分:0)

我认为Django最适合local_settings.py解决此问题。基于这种方法。在所有导入结束时(from config import *之后),只需添加:

# Add this at the end of all imports
# This is safe to commit and even push to production so long as you don't have local_config in your production server
try:
    from local_config import *
except ImportError:
    pass

每台机器创建一个local_config.py。如果它们与config内的设置具有相同的名称,那么它将从local_config导入所有内容,然后再从config导入,覆盖全局配置设置。

答案 3 :(得分:0)

如果您真的希望区分脚本中的生产环境和测试环境,那么此处的其他答案可提供完美的解决方案。但是我会主张采用不同的方法:要正确测试代码,您应该创建一个完全独立的测试环境并在那里运行代码,而无需任何更改(或更改配置文件)。

我不知道如何解决这个问题,因为我不知道脚本是做什么的。通常,您应该尝试创建一个欺骗您的生产环境并完全隔离的沙箱。您可以创建一个包装器脚本,该脚本将在沙箱中运行您的代码,并根据需要修改输入和输出,以使您的代码与测试环境而不是生产环境进行交互。这个包装器应该选择运行代码的环境以及它使用的配置文件。

这种方法将测试从代码本身抽象出来,使得两者都更容易维护。设计测试对于硬件而言是一种合理的方法,在这种方法中,您会遇到制造后的硬件,但对于软件而言,它更有意义,因为封装和欺骗数据更易于管理。您不必为了处理测试而修改生产代码库。

它还完全消除了当您想要在测试和部署之间切换到生产时忘记更改某些内容的机会。