Как настроить среду в консольной команде Symfony2 - PullRequest
39 голосов
/ 19 августа 2011

Надеюсь, простой вопрос - как определить, какую среду использовать при запуске консольной команды в Symfony2.Я создал несколько команд, однако я хотел бы запускать их в контексте моей промежуточной среды на моем промежуточном сервере и моей рабочей среды на рабочем сервере (разные среды определяют разные соединения с базой данных).Как мне настроить и передать эту информацию моей консольной команде?

Ответы [ 6 ]

70 голосов
/ 19 августа 2011

У вас есть два варианта, которые помогут вам.Вы можете указать среду, в которой будет работать консоль, с флагом --env и использовать --no-debug для отключения режима отладки.

php app/console --env=staging your:console:command или php app/console --env=prod your:console:command должны делать то, что вы ищете (консоль работает в среде dev с отладкой по умолчанию).

Для получения дополнительной информации см. код файла app/console.

53 голосов
/ 05 марта 2012

Вы также можете использовать переменную среды SYMFONY_ENV, чтобы установить среду по умолчанию, отличную от 'dev' (например, export SYMFONY_ENV=prod in ~/.bash_profile)

7 голосов
/ 10 июля 2014

Чтобы ответить на вопрос, который имел @croca, подробно расскажу о том, что разместил @Francesc Rosàs, и, как предложил @Problematic.

Если вы посмотрите в приложение / консоль, вы должны увидеть $env = $input->getParameterOption(array('--env', '-e'), getenv('SYMFONY_ENV') ?: 'dev');

Все, что это делает, проверяет входные аргументы, передаваемые на консоль для --env или -e, проверяет значение по умолчанию с getenv('SYMFONY_ENV') или устанавливает его на dev, если ни один из них не предоставляется.

Затем передается $kernel = new AppKernel($env, $debug);

По сути, вы можете либо внести изменения непосредственно в приложение / консоль, чтобы реализовать специфические функции вашего приложения, либо скопировать приложение / консоль в отдельный файл, такой как приложение / exec, а затем обработать переменную $ env, как вы предпочитаете определять нужную среду.

Простой пример: 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);

Тогда звоните php app/exec namespace:command arguments --flags

Кроме того, вы можете обработать свое собственное приложение вместо использования AppKernel app / console - инструкции от Symfony можно найти здесь: http://symfony.com/doc/current/components/console/introduction.html

5 голосов
/ 13 января 2017

Есть еще один вариант, хотя и не такой удобный, но работающий также с composer

SYMFONY_ENV=prod app/console cache:clear
4 голосов
/ 25 апреля 2014

Официальная документация гласит:

По умолчанию консольные команды выполняются в среде разработчика, и вы можете изменить это для некоторых команд.

Итак, как@Проблематично, вы можете указать среду для вашей команды, используя флаг "--env = your_env " или его ярлык "-e your_env ".

IЗадаться вопросом, возможно ли форсировать среду по умолчанию для команды.Я имею в виду, без использования флагов.Есть идеи?

1 голос
/ 19 августа 2011

Может быть, вы могли бы посмотреть на реализацию команды cache: clear.Это может дать вам некоторые подсказки о том, как выбрать среду из команды.

app/console help cache:clear
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...