Manage configuration files across environments

后端 未结 7 558
醉酒成梦
醉酒成梦 2021-01-31 16:52

How do you (your company) manage the config-files of the apps/systems you build? Let me tell you how we do it, and what the problem is.

I\'m working at a company where w

7条回答
  •  萌比男神i
    2021-01-31 17:30

    The Config4* project (disclaimer: I am its primary developer) does not have an out-of-the-box integration with .Net or WCF, so it is probably not useful to you. However, one of the features in Config4* is relevant to your question: it is the ability to embed if-then-else statements in a configuration file, so that the file can "adapt" itself for different environments (such as development, testing, acceptance and production).

    You may be able to modify that concept to work with whatever configuration syntax you are using in your .Net/WCF-based project (I'm not familiar with those technologies, but I'm guessing they probably use XML-based configuration files). In particular, you could write a script using, say, Python, that uses if-then-else statements to set environment-specific name=value pairs in a map, and then use some print statements to generate a set of configuration files tailored for an environment. A pseudo-code outline of such a script is:

    #--------
    # Set up configuration variables suitable for a specified environment
    #--------
    cfg["variable1"] = "default value";
    cfg["variable2"] = "another default value";
    if (environment == "testing") {
      cfg["variable1"] = "override default value for this environment";
      cfg["variable3"] = "value suitable for this environment";
      ...
    } else if (environment == "production") {
      ...
    }
    #--------
    # Now use print statements to generate configuration files
    # Alternatively, use the _name=value_ pairs in the map to
    # perform global search-and-replace on template versions of
    # configuration files.
    #--------
    ...
    

    For bonus points, the script could also generate a checklist of tests that need to be performed for the environment, for example, "Check if a firewall port needs to be opened between the following endpoints: ..."

提交回复
热议问题