我们开始采用的Symfony 2项目在这里工作,这是伟大的,但有我的工作来解决,我已经几乎得到了一个挑战,但并不完全。
Symfony的把环境作为一个单一的服务器上的独立的运行时的概念。 这是伟大的,因为你可以用不同的前端控制器(网络),或者使用在心血来潮的ENV开关(CLI)运行时之间进行切换。
但是,我们的代码是部署在多个服务器作为开发过程的一部分。 每个人都有一个本地虚拟机,然后通过代码集成,QA,分期,终于生产向上传播。
所以,我们的环境的概念是服务器(虚拟或物理)。 下面是与此自定义配置的目标
- 维护的Symfony的开箱即用的功能,在对于运行时环境切换
- 允许公共(即,显影剂控制)配置每个服务器
- 维持每个服务器私人(即,受控的SysAD)构
- 将努力为Web和CLI
这意味着我们不能只100%依靠parameters.ini或任何静态命名的文件,对于这个问题,因为开发人员需要在每个服务器的配置控制以及所有该文件将被未来生活的海誓山盟的饭桶。
所以,我想要做的就是这个。 添加一个新的价值parameters.ini那台服务器的环境。 像这样的事情
应用程序/配置/ parameters.ini
[parameters]
server="int"
然后,在内核中,加载基于该值的附加配置文件。 例如,我会为这个热爱工作,但它不会(因为容器还没有在这个步骤存在)
应用程序/ AppKernel.php
public function registerContainerConfiguration(LoaderInterface $loader)
{
$loader->load(__DIR__.'/config/config_'.$this->getEnvironment().'.yml');
// Per-server config
$server = $this->getContainer()->getParameter( 'server' );
if ( $server )
{
$loader->load(__DIR__.'/config/server/'.$server.'.yml');
}
}
这将使像应用程序文件的使用/配置/服务器/ int.yml,开发人员可以用它来控制非私有的(即不parameters.ini)的配置值。
感谢您的阅读,让我知道如果有什么是混乱的。
编辑
为了澄清,我的事情不能使用或依赖
- *从用户的个人资料,或通过nix的环境变量
export
。 为什么? 集成,质量保障和分阶段可能全部是在同一箱 - 任何在虚拟主机配置(不适用于CLI工作)
- 一个静态命名文件(即,有些事情名为server.ini将无法正常工作)