假设(简化)我有一台舞台机器和一台现场机器。两者都应该使用 prod 环境进行测试。不幸的是,在我们的舞台机器上,有一个可用的 memcache 实例。在现场有三个 memcache 实例。我们必须使用 Memcache 扩展。要实时配置它,我们使用如下配置:
services:
memcache.servers:
class: Memcache
calls:
- [ addserver, ["one.mc.live", %memcache.server.port% ] ]
- [ addserver, ["two.mc.live", %memcache.server.port% ] ]
- [ addserver, ["three.mc.live", %memcache.server.port% ] ]
common_cache:
class: Doctrine\Common\Cache\MemcacheCache
calls:
- [ setNamespace, [%memcache.namespace%] ] #from parameters.yml
- [ setMemcache, [@memcache.servers] ]
此外,在现场,我们正在将奴隶添加到我们的教义连接中,而在舞台上我们没有。在现场,我们希望将日志发送到远程服务,在舞台上我们不想(但其他所有记录器都应该以相同的方式配置!)。舞台上的 URL 应该可以在没有任何“app_stage.php”前缀的情况下访问。显然,这需要比我们使用 parameters.yml 解决的更多(复杂)机器特定配置。
为了让这种特定于机器的配置正常工作,我首先使用了一个由 config_prod.yml 导入的 config_local.yml(未版本化),然后 config_prod.yml 添加了运行 prod 所需的内容。这种尝试在记录日志时会失败,因为 Monolog 不会“忘记”一个已经定义过的记录器链(你不能简单地“覆盖”一个 main: 记录器,旧的记录器仍然存在并产生重复的日志)。
所以我目前尝试采用不同的方式:我从版本控制中删除了 config_prod.yml 并添加了一个(版本化的)config_stage.yml,它具有基本的产品配置但没有定义任何记录器。本地修改的 config_prod.yml 将其导入并添加环境的配置详细信息。
我对在 git 下没有 config_prod.yml 感觉不好,因为我们无法跟踪配置更改。我们必须告诉我们的设计师如何创建他们自己的 config_prod.yml 用于本地测试。我们必须在每个实时实例上创建一个 config_prod (+ parameters.yml)。
这是一种做事方式还是我错过了 Symfony2 配置文档中的某些内容?