getenv('SYMFONY_ENV') 在作曲家安装的 app/console 中为空,但在其他地方没问题

getenv('SYMFONY_ENV') is empty in app/console from composer install, but OK elsewhere

要在生产环境中部署我的 Symfony 应用程序,我 运行 在 bash 脚本中执行以下命令:

php composer.phar install --no-dev --optimize-autoloader

我收到以下错误:

Script Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::clearCache handling the post-install-cmd event terminated with an exception

An error occurred when executing the "'cache:clear --no-warmup'" command.

这是因为app/consolereturns中的getenv('SYMFONY_ENV')是一个空值,同时执行来自composer.jsonpost-install-的命令命令。因此,$env 值未设置为 prod,而是设置为 dev(默认值)。

但是,SYMFONY_ENV 值是可以的。

在终端中,如果我 运行:

printenv SYMFONY_ENV

它打印 prod

如果我运行:

php -r "print_r(getenv('SYMFONY_ENV'));"

它打印 prod

我遗漏了什么或做错了什么?

我才发现我是运行宁

sudo php composer.phar install --no-dev --optimize-autoloader

而不是

php composer.phar install --no-dev --optimize-autoloader

就我而言 (ubuntu 14.04),我在 /etc/environment 中定义了 SYMFONY_ENV,我认为所有用户都可以访问它,但 sudo 并非如此。我在没有 sudo 的情况下 运行 解决了我的问题(因为它没有理由)。

另一种解决方案可能是 运行 sudo -E php ... 以按照此处的建议保留用户环境:https://askubuntu.com/questions/161924/how-do-i-set-persistent-environment-variables-for-root