Symfony 2 - configuración de servidor múltiple

Estamos empezando a adoptar Symfony 2 para los proyectos aquí en el trabajo, lo cual es genial, pero hay un desafío que estoy tratando de resolver que casi tengo, pero no del todo.

Symfony trata el concepto de un entorno como un tiempo de ejecución separado en un solo servidor. Esto es genial porque puede cambiar entre tiempos de ejecución con diferentes controladores frontales (web) o usar el interruptor env (cli) a su gusto.

Sin embargo, nuestro código se implementa en muchos servidores como parte del proceso de desarrollo. Todo el mundo tiene una máquina virtual local, luego el código se propaga a través de la integración, control de calidad, puesta en escena y, finalmente, la producción.

Por lo tanto, nuestro concepto de un entorno es servidor (virtual o físico). Aquí están los objetivos con esta configuración personalizada.

Mantener la funcionalidad ootb de Symfony con respecto al cambio del entorno de ejecuciónPermitir la configuración pública (es decir, controlada por el desarrollador) por servidorMantener la configuración privada (es decir, controlada por sysad) por servidorFuncionará tanto para web como para cli.

Esto significa que no podemos confiar solo en el 100%parameters.ini o cualquier archivo con nombre estático, para el caso, ya que el desarrollador necesitará el control sobre la configuración de cada servidor, más todos estos archivos estarán viviendo uno junto al otro en git.

Entonces, lo que yome gusta hacer es esto Agregue un nuevo valor a parameters.ini que establezca el entorno del servidor. Algo como esto

app / config / parameters.ini

<code>[parameters]
    server="int"
</code>

Y luego, en el kernel, cargue un archivo de configuración adicional basado en ese valor. Por ejemplo, me encantaría que esto funcione, pero no es así (ya que el contenedor aún no existe en este paso)

app / AppKernel.php

<code>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');
  }
}
</code>

Esto permitiría el uso de un archivo comoapp / config / server / int.yml que el desarrollador puede usar para controlar valores de configuración no privados (es decir, no parameters.ini).

Gracias por leer, y hágame saber si algo es confuso.

EDITAR

Para aclarar, cosas quehipocresía usar o confiar en

* nix variables de entorno del perfil del usuario o viaexport. ¿Por qué? Integración, control de calidad y puesta en escena pueden estar en el mismo cuadroCualquier cosa en la configuración vhost (no funcionará para cli)Un archivo con nombre estático (es decir, algo que acaba de nombrarseserver.ini no funcionará)

Respuestas a la pregunta(1)

Su respuesta a la pregunta