getenv无法在EC2 Server中工作

Jul*_*oro 5 amazon-ec2 laravel

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

事情是尝试:

dd(getenv('APP_ENV'));
Run Code Online (Sandbox Code Playgroud)

它返回"false"

但是当我连接ssh并输入:

php artisan env
Run Code Online (Sandbox Code Playgroud)

我明白了

production
Run Code Online (Sandbox Code Playgroud)

知道为什么它停止工作???

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

composer dump-autoload -o
php artisan route:cache
php artisan config:cache
Run Code Online (Sandbox Code Playgroud)

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

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

php artisan config:cache
Run Code Online (Sandbox Code Playgroud)

如果是的话:

php artisan config:clear
Run Code Online (Sandbox Code Playgroud)

问题解决了.

TX!

Bog*_*dan 5

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

bootstrap/cache/config.php
Run Code Online (Sandbox Code Playgroud)

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

bootstrap/cache/config.php
Run Code Online (Sandbox Code Playgroud)

或者直接使用app辅助函数:

config('app.env');
Run Code Online (Sandbox Code Playgroud)

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

app('env');
Run Code Online (Sandbox Code Playgroud)

Laravel使用dotenv库内部从.ENV文件加载配置项和它们添加到环境变量使用运行putenv,但是当你的缓存配置中装载部分不再做,因为Laravel检测到有一个存在缓存文件和而是使用它,因此这些密钥.env不会加载到环境中,这无法通过getenv.

由于.env文件中的配置值仅在config目录中的实际配置文件中使用时才会缓存,因此您需要创建一个配置选项,以便在使用缓存时缓存和访问它们。

因此,如果您想BASE_URL.env文件中使用此值的键:

BASE_URL=http://domain.com/
Run Code Online (Sandbox Code Playgroud)

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

app()->environment(); // or App::environment()
Run Code Online (Sandbox Code Playgroud)

然后您甚至可以在使用以下配置时访问:

BASE_URL=http://domain.com/
Run Code Online (Sandbox Code Playgroud)

你可以在Laravel 文档中阅读更多关于访问配置值的信息