2015-05-18 9 views
6

Moja aplikacja Symfony ma kilka zależności, które są wymagane tylko do programowania, testowania i tym podobnych. Są one zdefiniowane w mojej sekcji composer.json w sekcji require-dev.Dlaczego Symfony nie ma pakietów deweloperskich w środowisku prod?

Oto jak dodać je do AppKernel.php:

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; 
    } 
} 

Kiedy zaktualizować aplikację, biegnę php composer.phar install --no-dev --optimize-autoloader. Spowoduje to zainstalowanie wszystkich wymagań, które nie są wymagane w środowisku deweloperów, a następnie czyści pamięć podręczną.

jednak wyczyszczenie pamięci podręcznej nie powiedzie się z następującym komunikatem:

To nie jest tylko problem z Bundle Doktryna urządzeń. Jeśli zmienię zamówienie, tak aby pakiet testów funkcjonalnych Liip był pierwszy, błąd będzie dotyczył tego pakietu.

Dlaczego widzę ten błąd? Dlaczego Symfony próbuje uzyskać dostęp do tych pakietów, mimo że wyraźnie nie znajdujemy się w środowisku programisty (zwróć uwagę na flagę kompozytora --no-dev)? I co mogę zrobić, aby to zniknęło bez konieczności instalowania wszystkich zależności od dev na maszynie produkcyjnej?

Odpowiedz

8

To dlatego, że domyślny adres symfony to dev, composer --no-dev mówi tylko kompozytorowi, aby nie instalował wymagań programistycznych, symfony nie wie o środowisku. Użyj zmiennej środowiskowej SYMFONY_ENV=prod. http://symfony.com/doc/current/cookbook/deployment/tools.html#c-install-update-your-vendors

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

+0

Nice! Wiedząc, że ta niewielka opcja pomaga, mój proces produkcji jest prosty i przejrzysty. –

1

Trzeba powiedzieć komendę cache:clear do pracy w środowisku produkcyjnym.

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

(Jeśli to konieczne, zmieniając "produkcji", aby cokolwiek jesteś wzywającą szczególną non-dev środowiska masz do czynienia z)

+0

Dzięki, to jest sedno problemu. Niestety, nie ma możliwości dodania parametru wiersza poleceń do wywołania kompozytorki, który jest następnie przekazywany do polecenia cache: clear. Wydaje się, że musi to być zrobione tak, jak sugerował Fracsi. – Chris

Powiązane problemy