错误500“;PHP致命错误:未捕获运行时异常:未定义APP_ENV环境变量;关于Symfony应用程序启动
我最近在prod服务器上部署了一个新的Symfony 4项目,在那里我(通过ssh)将错误500“;PHP致命错误:未捕获运行时异常:未定义APP_ENV环境变量;关于Symfony应用程序启动,symfony,environment-variables,symfony4,Symfony,Environment Variables,Symfony4,我最近在prod服务器上部署了一个新的Symfony 4项目,在那里我(通过ssh)将APP_ENV和APP_SECRET等设置为环境变量。两个命令printenv和set都在输出中列出了这些变量,所以我认为这一部分应该一切正常 但是,我在站点上收到一个错误500,返回的日志PHP致命错误:Uncaught RuntimeException:APP_ENV环境变量未定义。您需要为配置定义环境变量,或添加“symfony/dotenv”作为编写器依赖项,以从.env文件加载变量。 我错过了什么 您
APP_ENV
和APP_SECRET
等设置为环境变量。两个命令printenv
和set
都在输出中列出了这些变量,所以我认为这一部分应该一切正常
但是,我在站点上收到一个错误500,返回的日志PHP致命错误:Uncaught RuntimeException:APP_ENV环境变量未定义。您需要为配置定义环境变量,或添加“symfony/dotenv”作为编写器依赖项,以从.env文件加载变量。
我错过了什么 您的web服务器将无法使用系统变量。该变量应在vhost/htaccess文件中定义。我假设您使用的是Apache。系统变量对您的web服务器不可用。该变量应在vhost/htaccess文件中定义。我假设您使用的是Apache。如果您使用的是nginx,则必须在池配置文件的末尾定义 php5 /etc/php5/fpm/pool.d/www.conf php7 /etc/php/7.1/fpm/pool.d/www.conf
如果您使用的是nginx,则必须在池配置文件的末尾定义 php5 /etc/php5/fpm/pool.d/www.conf php7 /etc/php/7.1/fpm/pool.d/www.conf [EDIT 2020]-->使用“symfony/dotenv” 根据官方文档,您可以做的是将composer文件中的“symfony/dotenv”从require dev移动到require,这样它也可以安装在生产环境中。然后可以继续使用.env.local文件 如果您不想或不能使用“symfony/dotenv” 对于Apache和Ubuntu,首先需要激活
sudo a2enmod env
sudo service apache2 restart
然后将environment变量放入.htacess或vhost配置文件中。对于SF4,.htacess在/public中,下面是语法。我不知道顺序是否重要,我会说不,所以我把它们添加到文件的顶部
SetEnv APP_ENV prod
SetEnv APP_SECRET fjsdkfj...
SetEnv DATABASE_URL mysql://...
下面是一些随机的有用技巧:
- 您不想提交.htaccess文件。将其添加到部署工具的共享部分。在我的情况下(轻松部署捆绑包)
- 您需要在/etc/environment中复制环境变量,以便composer可以使用它。。。这是一个真正的麻烦,因为现在你复制了你的变量。所以Symfony团队说env变量更好,因为它更安全、更标准。但复制信息一点也不安全。也许我做错了(这是完全可能的)。如果你知道如何避免这种情况,请分享。
命令将显示其配置是否正确printenv
- 如果在生产环境中使用easy deploy bundle,请删除composer上的--quiet选项,以便在失败时显示清晰的错误消息(例如,因为它找不到env变量)。还要检查--此处没有dev选项,因此它不会安装dotenv包
->composerInstallFlags('--prefer-dist --no-interaction --no-dev')
sudo a2enmod env
sudo service apache2 restart
然后将environment变量放入.htacess或vhost配置文件中。对于SF4,.htacess在/public中,下面是语法。我不知道顺序是否重要,我会说不,所以我把它们添加到文件的顶部
SetEnv APP_ENV prod
SetEnv APP_SECRET fjsdkfj...
SetEnv DATABASE_URL mysql://...
下面是一些随机的有用技巧:
- 您不想提交.htaccess文件。将其添加到部署工具的共享部分。在我的情况下(轻松部署捆绑包)
- 您需要在/etc/environment中复制环境变量,以便composer可以使用它。。。这是一个真正的麻烦,因为现在你复制了你的变量。所以Symfony团队说env变量更好,因为它更安全、更标准。但复制信息一点也不安全。也许我做错了(这是完全可能的)。如果你知道如何避免这种情况,请分享。
命令将显示其配置是否正确printenv
- 如果在生产环境中使用easy deploy bundle,请删除composer上的--quiet选项,以便在失败时显示清晰的错误消息(例如,因为它找不到env变量)。还要检查--此处没有dev选项,因此它不会安装dotenv包
->composerInstallFlags('--prefer-dist --no-interaction --no-dev')