Si tout va bien une question simple - comment peut-on spécifier quel environnement utiliser lors de l'exécution d'une commande de console dans Symfony2. J'ai créé quelques commandes, mais je voudrais les exécuter dans le contexte de mon environnement de 'staging' sur mon serveur de staging et de mon environnement de 'prod' sur mon serveur de production (les différents environnements définissent différentes connexions à la base de données). Comment configurer et transmettre ces informations à ma commande de console?
Vous avez deux options qui vous aideront. Vous pouvez spécifier l'environnement dans lequel la console s'exécutera avec le --env
flag, et utilisez --no-debug
pour désactiver le mode de débogage.
php app/console --env=staging your:console:command
ou php app/console --env=prod your:console:command
devrait faire ce que vous cherchez (la console s'exécute dans l'environnement dev
avec le débogage activé par défaut).
Vous pouvez consulter le code du app/console
fichier pour plus d'informations.
Vous pouvez également utiliser la variable d'environnement SYMFONY_ENV pour définir un environnement par défaut distinct de 'dev' (par exemple export SYMFONY_ENV=prod
dans ~/.bash_profile
)
Pour répondre à la question de @croca, développer ce que @Francesc Rosàs a publié et comme l'a suggéré @Problematic.
Si vous regardez dans l'application/console, vous devriez voir $env = $input->getParameterOption(array('--env', '-e'), getenv('SYMFONY_ENV') ?: 'dev');
Tout cela ne fait que vérifier les arguments d'entrée passés à la console pour --env
Ou -e
, Vérifie la valeur par défaut de getenv('SYMFONY_ENV')
, ou la définit sur dev
si aucun n'est fourni.
Il est ensuite passé à $kernel = new AppKernel($env, $debug);
Vous pouvez essentiellement apporter des modifications directement à l'application/console pour obtenir les fonctionnalités spécifiques de votre application ou copier l'application/la console dans un fichier distinct tel que l'application/exécutable, puis traiter la variable $ env comme vous préférez pour déterminer l'environnement souhaité.
Exemple simple: app/exec
#!/usr/bin/env php
<?php
/**
* disabled debug mode,
* set environment based on requesting address being local
* otherwise the server's IP address
* be sure to perform at least chmod(750) on the file to ensure it is executable
* otherwise it must be prefixed with your php executable
*/
set_time_limit(0);
require_once __DIR__.'/bootstrap.php.cache';
require_once __DIR__.'/AppKernel.php';
use Symfony\Bundle\FrameworkBundle\Console\Application;
use Symfony\Component\Console\Input\ArgvInput;
$input = new ArgvInput();
$env = ($_SERVER['REMOTE_ADDR'] === '127.0.0.1' || $_SERVER['REMOTE_ADDR'] === '::1' ? 'dev' :
($_SERVER['SERVER_ADDR'] === '192.168.2.1' ? 'test' : 'prod')
);
$kernel = new AppKernel($env, false);
$application = new Application($kernel);
$application->run($input);
Appelez ensuite php app/exec namespace:command arguments --flags
De plus, vous pouvez traiter votre propre application au lieu d'utiliser l'application/console AppKernel - les instructions de Symfony peuvent être trouvées ici: http://symfony.com/doc/current/components/console/introduction.html
Il existe une autre variante, moins pratique, mais qui fonctionne également avec composer
SYMFONY_ENV=prod app/console cache:clear
La documentation officielle dit:
Par défaut, les commandes de la console s'exécutent dans l'environnement de développement et vous souhaiterez peut-être modifier cela pour certaines commandes.
Ainsi, comme le suggère @Problematic, vous pouvez spécifier l'environnement de votre commande en utilisant l'indicateur "--env = your_env" ou son raccourci "-e your_env".
Je me demande s'il est possible de forcer l'environnement par défaut pour une commande. Je veux dire, sans avoir à utiliser les drapeaux. Une idée?
Vous pourriez peut-être regarder l'implémentation de la commande cache: clear. Cela peut vous donner quelques indices sur la façon de choisir l'environnement à partir d'une commande.
app/console help cache:clear