Symfony 2 - Konfiguration für mehrere Server

Wir fangen an, Symfony 2 für Projekte hier bei der Arbeit zu übernehmen, was großartig ist, aber es gibt eine Herausforderung, an deren Lösung ich arbeite, die ich fast habe, aber nicht ganz.

Symfony behandelt das Konzept einer Umgebung als separate Laufzeit auf einem einzelnen Server. Dies ist großartig, da Sie mit verschiedenen Front-Controllern (Web) oder nach Belieben mit dem Env-Schalter (CLI) zwischen den Laufzeiten wechseln können.

Unser Code wird jedoch im Rahmen des Entwicklungsprozesses auf vielen Servern bereitgestellt. Jeder hat eine lokale VM, und der Code wird durch Integration, Qualitätssicherung, Staging und schließlich durch Produktion weitergegeben.

Unser Konzept einer Umgebung ist also ein Server (virtuell oder physisch). Hier sind die Ziele dieser benutzerdefinierten Konfiguration

Behalten Sie die Symfony-ootb-Funktionalität in Bezug auf das Umschalten der Laufzeitumgebung beiÖffentliche (d. H. Vom Entwickler kontrollierte) Konfiguration pro Server zulassenBehalten Sie die private (d. H. Sysad-gesteuerte) Konfiguration pro Server beiFunktioniert sowohl für das Web als auch für das CLI

Das heißt, wir können uns nicht nur zu 100% darauf verlassenparameters.ini oder jede statisch benannte Datei, da der Entwickler die Kontrolle über die Konfiguration für jeden Server haben muss und alle diese Dateien nebeneinander in Git gespeichert werden.

Also, was würde ichmögen zu tun ist das. Fügen Sie parameters.ini einen neuen Wert hinzu, der die Serverumgebung festlegt. Etwas wie das

app / config / parameters.ini

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

Laden Sie dann im Kernel eine zusätzliche Konfigurationsdatei, die auf diesem Wert basiert. Zum Beispiel würde ich gerne, dass dies funktioniert, aber es funktioniert nicht (da der Container in diesem Schritt noch nicht vorhanden ist).

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>

Dies würde die Verwendung einer Datei wie ermöglichenapp / config / server / int.yml dass der Entwickler nicht-private (d. h. nicht parameters.ini) Konfigurationswerte steuern kann.

Vielen Dank fürs Lesen und lassen Sie mich wissen, wenn etwas verwirrend ist.

BEARBEITEN

Zur Klarstellung, Dinge, die ichkippen verwenden oder sich darauf verlassen

* nix Umgebungsvariablen aus dem Benutzerprofil oder überexport. Warum? Integration, QA und Staging befinden sich möglicherweise in derselben BoxAlles in der VHOST-Konfiguration (funktioniert nicht für CLI)Eine Datei mit statischem Namen (d. H. Etwas, das gerade benannt wurde)server.ini wird nicht funktionieren)

Antworten auf die Frage(1)

Ihre Antwort auf die Frage