希望是一个简单的问题 - 如何在Symfony2中运行控制台命令时指定使用哪个环境.我已经创建了一些命令,但是当我在我的登台服务器和我的'prod'环境中时,我想在我的'staging'环境的上下文中运行它们在我的生产服务器上(不同的环境定义不同的数据库连接).如何配置此信息并将其传递给我的控制台命令?
Pro*_*tic 72
您有两个选项可以帮助您.您可以使用--env标志指定控制台将运行的环境,并使用--no-debug禁用调试模式.
php app/console --env=staging your:console:command或者php app/console --env=prod your:console:command应该做你正在寻找的东西(控制台dev默认运行在调试开启的环境中).
您可以查看app/console文件的代码以获取更多信息.
Fra*_*sas 54
您还可以使用SYMFONY_ENV环境变量来设置与'dev'不同的默认环境(例如,export SYMFONY_ENV=prod在~/.bash_profile)
要回答@croca的问题,要扩展@FrancescRosàs发布的内容,以及@Problematic的建议.
如果您在应用程序/控制台中查看,您应该看到 $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);
Run Code Online (Sandbox Code Playgroud)
然后打电话 php app/exec namespace:command arguments --flags
此外,您可以处理自己的应用程序而不是使用应用程序/控制台AppKernel - 可以在此处找到Symfony的说明:http://symfony.com/doc/current/components/console/introduction.html
小智 5
官方文档说:
默认情况下,控制台命令在开发环境中运行,您可能希望为某些命令更改此设置。
因此,正如@Problematic 建议的那样,您可以使用标志“--env= your_env ”或其快捷方式“-e your_env ”为您的命令指定环境。
我想知道是否可以为命令强制使用默认环境。我的意思是,无需使用标志。任何的想法?
还有另一种变体,虽然不太方便,但也可以使用 composer
SYMFONY_ENV=prod app/console cache:clear
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
37640 次 |
| 最近记录: |