错误500" PHP致命错误:未捕获RuntimeException:未定义APP_ENV环境变量。"在Symfony app开始

时间:2017-12-29 20:57:08

标签: symfony environment-variables symfony4

我最近将一个新的Symfony 4项目部署到prod服务器,我在其中设置(通过ssh)APP_ENVAPP_SECRET等环境变量。命令printenvset都会在输出中列出这些变量,因此我假设该部分的所有内容都应该正常。

我在网站上收到错误500,但日志返回PHP Fatal error: Uncaught RuntimeException: APP_ENV environment variable is not defined. You need to define environment variables for configuration or add "symfony/dotenv" as a Composer dependency to load variables from a .env file.

我在这里缺少什么?

3 个答案:

答案 0 :(得分:4)

以下是我如何使其发挥作用。它适用于Ubuntu上的Apache

首先,您需要激活mod_env

donor_name

然后将environement变量放在.htacess文件中。对于SF4,它位于/ public,这是语法。我不知道订单是否重要,我会说不,所以我将它们添加到文件的顶部。

donor_status

现在一些随机有用的技巧:

  • 您不想提交.htaccess文件。将其添加到部署工具的共享部分。就我而言(easy-deploy-bundle)

    sudo a2enmod env
    sudo service apache2 restart
    
  • 你需要在/ etc / environment中复制环境变量,这样才能被作曲家使用......这个是一个真正的痛苦,因为现在你复制了你的变量。所以Symfony团队表示env变量更好,因为更安全和标准。但复制信息并不安全。也许我做错了(完全可能)。如果您知道如何避免这种情况请分享。 SetEnv APP_ENV prod SetEnv APP_SECRET fjsdkfj... SetEnv DATABASE_URL mysql://... 命令将显示是否正确配置。

  • 如果您使用easy-deploy-bundle进行生产,请删除composer上的--quiet选项,以便在失败时有明确的错误消息(例如,因为它没有找到env变量)。还要检查--no-dev选项是否在这里,因此它不会安装dotenv包。

    ->sharedFilesAndDirs(['public/.htaccess'])
    

答案 1 :(得分:2)

您的网络服务器无法使用系统变量。该变量应在vhost / htaccess文件中定义。我假设您正在使用Apache。

答案 2 :(得分:1)

如果您使用的是nginx,则必须在池配置文件的末尾定义。

PHP5

  

/etc/php5/fpm/pool.d/www.conf

PHP7

  

/etc/php/7.1/fpm/pool.d/www.conf