getenv无法在EC2 Server中工作

时间:2016-03-31 22:36:20

标签: laravel amazon-ec2

我正在尝试部署到我的应用程序,该应用程序在本地运行良好。

尝试时的事情:

dd(getenv('APP_ENV'));

它返回" false"

但是当我连接ssh并输入时:

php artisan env

我得到了

production

知道它为何停止工作???

对于记录,在生产中,我的部署脚本执行3个命令:

composer dump-autoload -o
php artisan route:cache
php artisan config:cache

我提到它是因为它可能是唯一不同的软件配置。

编辑:我发现有问题的命令是:

php artisan config:cache

如果是的话:

php artisan config:clear

问题解决了。

的Tx!

1 个答案:

答案 0 :(得分:3)

使用缓存配置时,.env文件不再使用,因此getenv无效,因为配置是从以下位置加载的:

bootstrap/cache/config.php

相反,您可以从加载的应用程序配置中获取当前环境,如下所示:

config('app.env');

或直接使用app辅助函数:

app('env');

作为第三种选择,您始终可以使用environment方法来获取当前环境:

app()->environment(); // or App::environment()

Laravel在内部使用dotenv库从.env文件加载配置键,使用add them to the environment variables加载putenv,但是当您缓存配置时,加载部分不再进行,因为Laravel检测到存在缓存文件并使用该缓存文件,因此来自.env的密钥不会加载到环境中,这不能通过getenv访问。

并且因为.env文件中的配置值仅在config目录中的实际配置文件中使用时被缓存,您需要创建一个配置选项,以便缓存和访问它们当你使用缓存时。

因此,如果您希望BASE_URL文件中包含.env密钥,请使用此值:

BASE_URL=http://domain.com/

如果希望在缓存配置时能够访问其值,则需要在配置文件中使用它。例如,您可以将其添加到config/app.php文件中,如下所示:

'base_url' => env('BASE_URL')

然后即使配置iit使用:

也可以访问
config('app.base_url')

您可以在Laravel Documentation中阅读有关访问配置值的更多信息。