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?
Nice! Wiedząc, że ta niewielka opcja pomaga, mój proces produkcji jest prosty i przejrzysty. –