2

显然这是一个常见问题:我们有由 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 回答 4

4

在 *nix 上:

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

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

于 2012-11-27T19:25:24.247 回答
1

任何主要服务器都可以使用设置环境选项。如果未定义,则默认为生产。

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

于 2012-11-27T19:18:08.567 回答
1

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

在它的配置中,我们有一个对每个服务器都不同的行:

mv config_<env>.php config.php

而 config.php 在 git ignore 中。

于 2012-11-27T19:21:05.600 回答
0

我过去几年一直在开发的 Web 应用程序使用 Java API 后端,前端有一个 PHP 层用于模板等。我们使用 Maven 来控制环境的差异。

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

Udan类似,当发布到 dev/staging/live 时,我们也使用 Jenkins 将它们整合在一起。

看来这里有一个专门为 PHP 设计的 Maven:http
://www.php-maven.org/ 我从来没有使用过它,所以不能说它有多大用处,尽管也许值得一看。

于 2012-11-27T19:27:48.023 回答