有哪些方法可用于区分PHP应用程序中的生产/登台/开发环境?

时间:2012-11-27 19:12:28

标签: php configuration release development-environment production-environment

显然这是一个常见问题:我们拥有由git或其他SCM管理的PHP Web应用程序,并且(理想情况下)部署在3个不同的环境中,这些环境应该非常相似。唯一的区别应该是在特定配置中,例如寻址外部资源(例如:数据库主机,内存缓存等)。

以下是我见过或使用的三种方法:

  1. 维护一组主机名=>环境类型: $hosts = array ('host1.example.com' => 'production', 'staging.example.com' => 'staging' ...)
  2. 拥有.gitignore中的配置文件(或其他SCM的等效文件)以及要复制和编辑的示例版本
  3. 使用http.conf在http.conf中设置env_var:“SetEnv ENVIRONMENT dev”,然后在脚本中设置$environment = get_env('ENVIRONMENT');
  4. 还有其他方法吗?我知道每一个都有好处和陷阱 - 那是什么?

4 个答案:

答案 0 :(得分:4)

On * nix:

  • 您可以直接在/etc/environment中设置环境变量,以便在系统范围内应用它们。
  • 您只能在/etc/apache2/envvars(Ubuntu)或/etc/sysconfig/httpd(CentOS)中为Apache设置环境变量。

由于环境配置是特定于环境的而不是特定于应用程序的,因此使用.htaccess或其他应用程序配置文件来设置它们是没有意义的。

答案 1 :(得分:1)

使用set environment选项可以由任何主要服务器完成。 如果未定义,则默认为生产。

这样您就不必维护服务器列表。并且可以使它远离git

答案 2 :(得分:1)

每当发出推送事件时,我们都会使用Jenkins从git服务器中提取。

在它的配置中,我们有一条不同的服务器:

mv config_<env>.php config.php

虽然config.php在git中忽略。

答案 3 :(得分:0)

我过去几年一直在研究的Web应用程序在前面使用了一个带有PHP层的Java API后端进行模板化等。我们使用Maven来控制环境中的差异。

我不完全确定它是如何组合在一起的,因为我没有自己设置它。我们所拥有的是一个分隔成各种环境的大型settings.xml文档。然后根据环境从该文件中提取配置选项。

Udan类似,我们也会在发布到dev / staging / live时使用Jenkins将它们全部拉出来。

看来有一个专为PHP设计的Maven:http://www.php-maven.org/
我从来没有用它,所以不能说它有多么有用,值得一看但也许。