2016-06-02 10 views
3

Ich verwende eine Symfony 2.8.6 Anwendung auf Nginx/PHP-FPM.Symfony: Deaktivieren von Umgebungsvariablen aus dem Caching

Es gibt mehrere Domänen, die in diesen Server aufgelöst werden, und grundsätzlich möchte ich die RDB-Konfiguration ändern, je nachdem, auf welche Domäne zugegriffen wurde.

Also meine nginx.conf hat Zeilen wie fastcgi_param SYMFONY__SOME__PARAM $host, aber ich habe ein Problem.
Diese Parameterinjektion wird zwischengespeichert und funktioniert nicht wie vorgesehen.

Zum Beispiel gibt es zwei Domänen a.example.com und b.example.com, und sie zeigen auf meinen Server. Ich möchte, dass es sich mit einem anderen MySQL-Server verbindet, wenn über eine andere Domäne zugegriffen wird, aber es ignoriert die Domäne und stellt immer eine Verbindung zum selben Server her.

Was ich habe bestätigt:

  • Nginx die Variable korrekt passiert.
  • Die Ausgabe von var_dump($_SERVER['SYMFONY__SOME__PARAM']) ändert sich wie erwartet.
  • Der Parameter in app/cache/prod/appProdProjectContainer.php

gespeichert AFAIS gibt es zwei Möglichkeiten: Konfiguration Cache deaktivieren vollständig oder Caching-Umgebungsvariablen zu deaktivieren.
Ich denke, die letztere Option ist vorzuziehen, aber ich weiß nicht, wie Sie den Cache deaktivieren, ganz oder teilweise.

Antwort

1

Die Verwendung dynamischer Umgebungsvariablen in Servicedefinitionen ist in Symfony nicht möglich (siehe symfony/symfony#16403 (comment) warum). Sie können versuchen, Incenteev/DynamicParametersBundle zu verwenden, aber ich habe keine Erfahrung damit.

+0

Vielen Dank! Ich habe versucht Incenteev/DynamicParametersBundle und [Fervo/EnvironmentBundle] (https://github.com/fervo/EnvironmentBundle), aber beide scheinen das gleiche Problem zu haben (Parameter werden zwischengespeichert). Derzeit habe ich 'initializeContainer' in' AppKernel.php' überschrieben, so dass die Umgebungsparameter jedes Mal aktualisiert werden und dieser Hack tatsächlich funktioniert hat, aber ich möchte wissen, ob es bessere Möglichkeiten gibt. –

+0

Und was hast du in 'initializeContainer' gemacht? Deaktivieren Sie den Cache in der Produktion ist keine gute Idee. Ich denke DynamicParametersBundle sollte funktionieren, aber es hat einige Einschränkungen, die Sie beachten müssen (aber das Anwendungsbeispiel scheint zu tun, was Sie brauchen) ... "Wenn Sie einen Parameter direkt zur Laufzeit aus dem Container holen, wird die Umgebungsvariable nicht verwendet" muss '$ this-> get ('incentive_dynamic_parameters.retriever') -> get ('param')') verwenden, "Parameter oder Argumente, die durch Verkettung anderer Parameter erstellt werden, werden nicht von den Umgebungsvariablen abhängen" – 1ed

+0

DynamicParametersBundle ist nicht was Ich möchte wegen der zweiten Einschränkung, auf die Sie hingewiesen haben (und in Readme geschrieben). Es kann nicht für die DBAL-Konfiguration verwendet werden. Was ich getan habe, war nur überschreiben "getDefaultParameters" von ProjectContainer (eine zwischengespeicherte Klasse), so dass es die _current_ Umgebungsvariablen lesen wird. –

0

Wie ändert sich das Cache-Verzeichnis für jede Umgebung?

fastcgi_param SYMFONY__CACHE_DIR /path/to/cache 
Verwandte Themen