2015-05-18 6 views
6

Meine Symfony-Anwendung hat einige Abhängigkeiten, die nur für Entwicklung, Tests und dergleichen benötigt werden. Diese sind in meinem composer.json im require-dev Abschnitt definiert.Warum fehlen Symfony Dev-Bundles in der Prod-Umgebung?

Hier ist, wie ich sie in AppKernel.php hinzufügen:

class AppKernel extends Kernel 
{ 
    public function registerBundles() 
    { 
     $bundles = array(
      new Symfony\Bundle\FrameworkBundle\FrameworkBundle(), 
      new Symfony\Bundle\SecurityBundle\SecurityBundle(), 
      // ... 
     ); 

     if (in_array($this->getEnvironment(), array('dev', 'test'))) { 
      $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle(); 
      $bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle(); 
      $bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle(); 
      $bundles[] = new Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle(); 
      $bundles[] = new Liip\FunctionalTestBundle\LiipFunctionalTestBundle(); 
     } 

     return $bundles; 
    } 
} 

Wenn ich meine Anwendung aktualisieren, ich laufe php composer.phar install --no-dev --optimize-autoloader. Dies installiert alle Anforderungen, die für die Entwicklungsumgebung nicht erforderlich sind, und löscht dann den Cache.

schlägt jedoch fehl, dem Löschen des Cache mit der folgenden Meldung:

Dies ist nicht nur ein Problem mit der Lehre Fixtures Bundle. Wenn ich die Reihenfolge ändere, so dass das Liip Functional Test Bundle zuerst kommt, dann wird der Fehler über dieses Bündel sein.

Warum sehe ich diesen Fehler? Warum versucht Symfony, auf diese Bundles zuzugreifen, obwohl wir uns explizit nicht in der Entwicklungsumgebung befinden (beachten Sie das Composer-Flag --no-dev)? Und was kann ich tun, um dies zu beseitigen, ohne alle Dev-Abhängigkeiten auf dem Produktionsrechner installieren zu müssen?

Antwort

8

Es ist, weil symfony default env ist dev, composer --no-dev nur sagt composer nicht zu dev anforderungen installieren, symfony weiß nicht über die umgebung. Verwenden Sie SYMFONY_ENV=prod Umgebungsvariable. http://symfony.com/doc/current/cookbook/deployment/tools.html#c-install-update-your-vendors

Z. B: $ SYMFONY_ENV=prod php composer.phar install --no-dev --optimize-autoloader

+0

Nice! Die Kenntnis dieser kleinen Option hilft mir dabei, meinen Produktionsprozess einfach und sauber zu halten. –

1

Sie müssen in einer Produktionsumgebung ausführen, um die den cache:clear Befehl erzählen.

php app/console --env=production cache:clear 

(Falls nötig, „Produktion“, was auch immer zu ändern sind Sie die besondere Nicht-dev Umgebung aufrufen, mit Ihnen zu tun hat)

+0

Danke, das ist der Kern des Problems. Leider gibt es keine Möglichkeit, dem Composer-Aufruf einen Befehlszeilenparameter hinzuzufügen, der dann an den Befehl cache: clear übergeben wird. Es scheint, dass es getan werden muss, wie Fracsi vorgeschlagen hat. – Chris

Verwandte Themen