2015-05-18 15 views
6

La mia applicazione Symfony ha alcune dipendenze che sono necessarie solo per lo sviluppo, il testing e simili. Questi sono definiti nel mio composer.json nella sezione require-dev.Perché Symfony non ha i bundle di sviluppo in ambiente prod?

Ecco come li aggiungo in 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; 
    } 
} 

Quando aggiorno la mia domanda, corro php composer.phar install --no-dev --optimize-autoloader. Questo installa tutti i requisiti non richiesti per l'ambiente di sviluppo e quindi cancella la cache.

Tuttavia, svuotare la cache non riesce con il seguente messaggio:

Questo non è solo un problema con la dottrina Fixtures Bundle. Se cambio l'ordine in modo che il bundle di test funzionale di Liip venga prima, l'errore riguarderà quel pacchetto.

Perché vedo questo errore? Perché Symfony tenta di accedere a questi pacchetti anche se non ci troviamo esplicitamente nell'ambiente di sviluppo (notare il flag --no-dev per il compositore)? E cosa posso fare per farlo andare via senza dover installare tutte le dipendenze di sviluppo sulla macchina di produzione?

risposta

8

È perché symfony default env è dev, composer --no-dev dice al compositore di non installare i requisiti di sviluppo, symfony non conosce l'ambiente. Utilizza la variabile ambientale SYMFONY_ENV=prod. http://symfony.com/doc/current/cookbook/deployment/tools.html#c-install-update-your-vendors

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

+0

Nizza! Conoscere questa piccola opzione aiuta a mantenere il processo di creazione della produzione semplice e pulito. –

1

è necessario indicare il comando cache:clear per l'esecuzione in un ambiente di produzione.

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

(Se necessario, cambiare la "produzione" a tutto ciò che si sta chiamando l'ambiente non-dev particolare hai a che fare con)

+0

Grazie, questo è il nocciolo del problema. Sfortunatamente, non c'è modo di aggiungere un parametro della riga di comando alla chiamata del compositore che viene poi passata al comando cache: clear. Sembra che debba essere fatto come suggerito da Fracsi. – Chris

Problemi correlati