zoukankan      html  css  js  c++  java
  • 环境配置文件布局解决方案

    一般来说,我们有开发环境(DEV)、测试环境(TEST)、生产环境(PROD)。

    怎样解决自动根据不同环境切换相应的配置文件的问题呢?

    本文以PHP为例。

    最简单的方法,是确保三种环境的服务器可以给出一模一样的设置给程序,如数据库地址、端口、数据库名、用户名密码等。但在资源紧缺的环境下可操作性不强。

    首先,无论如何,建三个对应的配置文件是必须的。

    如:

    config.dev.php

    config.test.php

    config.prod.php/config.php

    然后,便是自动切换的问题。

    其实,正常情况下,这三者的运行环境可能都相同,无法简单的通过环境的不同进行区分。除非那种极客型的,如修改php代码,不同环境增加不同环境变量标示手动编译PHP,这样运行环境中就具备了区分标示,然后封装一个判断方法。同样在资源紧缺的情况下,可操作性不强。

    剩下比较可行的,就是通过文件软连接的方式。*nix、Windows都有办法创建文件软连接,系统无论有几个配置文件,在运行时都只需要一个文件,所以在不造成相应程序大幅改动代码来实现切换的话,就是这种方案了:

    config.dev.php

    config.test.php

    config.prod.php

    然后手动在每种环境创建软连接config.php,指向对应的文件config.xxx.php。

    实在像虚拟主机,就直接在服务器上把config.prod.php 改成 config.php

    PS

    在大型的应用中,异常复杂的无数资源需要调用的环境,专门做一个资源管理与调度的系统,然后针对每种资源如mysql服务编号命名,然后在应用环境中,调用统一的api来获取配置资源。这种方式,其实还是要在资源比较充足的情况下,尤其测试环境与正式环境不能在一台机器上。这样,可以根据应用请求的ip或端口来判断:那台是测试服务器,我就返回一个测试用的配置数据给它;这台是正式环境,就返回正式的配置。

    PPS

    有一个《2011PHP技术高峰论坛演讲-张宴》这样的课件,从当初发布到网上,期间看了很多次,里面演示的很多东西,都有很强的启发意义。

  • 相关阅读:
    Redis系列(三)-Redis replication 实现主从复制(读写分离)
    Redis系列(二)-Redis的RDB和AOF两种持久化机制
    Redis系列(一)-CentOS7下Redis单机安装+自启动
    vmware安装centos 7,没有ifconfig命令,无法访问网络
    本博客停更
    「杂文」昨日之纯真,明日之坚毅
    OkHttpClient跳过证书验证
    java 获取十个工作日之前或之后的日期(算当天)
    java pdfBox给PDF添加图片水印
    docker pull 提示timeout
  • 原文地址:https://www.cnblogs.com/x3d/p/3956925.html
Copyright © 2011-2022 走看看