我正在尝试部署到我的应用程序,该应用程序在本地运行良好。
尝试时的事情:
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!
答案 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中阅读有关访问配置值的更多信息。