如何在Symfony2控制台命令中设置环境

时间:2011-08-18 22:30:14

标签: symfony

希望是一个简单的问题 - 如何在Symfony2中运行控制台命令时指定使用哪个环境。我已经创建了一些命令,但是当我在我的登台服务器和我的'prod'环境中时,我想在我的'staging'环境的上下文中运行它们在我的生产服务器上(不同的环境定义不同的数据库连接)。如何配置此信息并将其传递给我的控制台命令?

6 个答案:

答案 0 :(得分:70)

您有两个选项可以帮助您。您可以使用--env标志指定控制台将运行的环境,并使用--no-debug禁用调试模式。

php app/console --env=staging your:console:commandphp app/console --env=prod your:console:command应该执行您正在寻找的内容(控制台在dev环境中运行并默认启用调试功能。)

您可以查看app/console文件的代码以获取更多信息。

答案 1 :(得分:53)

您还可以使用SYMFONY_ENV环境变量将默认环境设置为与'dev'不同(例如export SYMFONY_ENV=prod中的~/.bash_profile

答案 2 :(得分:7)

回答@croca的问题,扩展@FrancescRosàs发布的内容,以及@Problematic的建议。

如果你在app / console中查看,你会看到$env = $input->getParameterOption(array('--env', '-e'), getenv('SYMFONY_ENV') ?: 'dev');

所有这一切都是检查传递给--env-e控制台的输入参数,检查getenv('SYMFONY_ENV')的默认值,或者如果两者都没有,则设置为dev提供。

然后传递给$kernel = new AppKernel($env, $debug);

您实际上可以直接对app / console进行更改以实现应用程序的特定功能,或者将app / console复制到单独的文件(如app / 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 - 可以在此处找到Symfony的说明:http://symfony.com/doc/current/components/console/introduction.html

答案 3 :(得分:5)

还有另一种变体,虽然不太方便,但也适用于composer

SYMFONY_ENV=prod app/console cache:clear

答案 4 :(得分:4)

官方文件说:

  

默认情况下,控制台命令在开发环境中运行,您可能希望为某些命令更改此命令。

因此,正如@Problematic建议的那样,您可以使用标志“--env = your_env ”或其快捷方式“-e your_env ”为您的命令指定环境

我想知道是否可以强制命令的默认环境。我的意思是,不必使用旗帜。有什么想法吗?

答案 5 :(得分:1)

也许您可以查看cache:clear命令的实现。这可能会为您提供有关如何从命令中选择环境的一些线索。

app/console help cache:clear