Php 在不重新启动服务器的情况下重新加载.env变量(Laravel 5,共享主机)

Php 在不重新启动服务器的情况下重新加载.env变量(Laravel 5,共享主机),php,mysql,laravel,laravel-5,dreamhost,Php,Mysql,Laravel,Laravel 5,Dreamhost,My Laravel 5在配置数据库之前运行正常,然后发现此错误: SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known 做一些研究,似乎我配置MySQL访问太晚了,所以我应该重新启动服务器以获得正确的环境变量。嗯,我使用的是Dreamhost的共享服务器,但我做不到 我应该如何解决这个问题 谢谢您的配置变量可能已缓存。验证您的config/app.php以及

My Laravel 5在配置数据库之前运行正常,然后发现此错误:

SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known
做一些研究,似乎我配置MySQL访问太晚了,所以我应该重新启动服务器以获得正确的环境变量。嗯,我使用的是Dreamhost的共享服务器,但我做不到

我应该如何解决这个问题


谢谢

您的配置变量可能已缓存。验证您的
config/app.php
以及
.env
文件,然后重试

php artisan cache:clear

在命令行上。

config/database.php
中,我将默认的数据库连接从mysql更改为sqlite。我删除了
.env
文件(实际上已将其重命名),并使用
触摸存储/database.sqlite
创建了sqlite文件。迁移使用sqlite

然后我将
config/database.php
defaultdb连接切换回mysql,并恢复了
.env
文件。迁移使用的是mysql


我想这没有道理。可能是服务器端的问题。

如果您在服务器上运行了
php artisan config:cache
,那么您的Laravel应用程序可能会缓存您放入
.env
文件中的过时配置设置


运行
php artisan config:clear
来解决这个问题。

如果有人遇到这个问题,而他们无法重新加载他们的Web服务器(长时间运行的控制台命令,如队列运行程序)或需要在请求中间重新加载他们的.env文件,我找到了在laravel 5中正确重新加载.env变量的方法

use Dotenv;
use InvalidArgumentException;

try {
    Dotenv::makeMutable();
    Dotenv::load(app()->environmentPath(), app()->environmentFile());
    Dotenv::makeImmutable();
} catch (InvalidArgumentException $e) {
    //
}
一个简短的解决方案:

use Dotenv;

with(new Dotenv(app()->environmentPath(), app()->environmentFile()))->overload();
with(new LoadConfiguration())->bootstrap(app());
在我的例子中,我需要在以编程方式更改.env后重新建立数据库连接,但它不起作用,如果遇到这种问题,请尝试以下方法

app('db')->purge($connection->getName()); 

在重新加载.env之后,这是因为Laravel应用程序之前可能已经访问了默认连接,
\light\Database\DatabaseManager
需要重新读取配置参数

根据您的情况,您可以清除4种类型的缓存

php artisan cache:clear
当您希望清除应用程序缓存时,可以在控制台中运行上述语句。它所做的是,此语句清除storage\framework\cache中的所有缓存

php artisan route:cache
这将清除路由缓存。因此,如果您添加了新路由或更改了路由控制器或操作,则可以使用此控制器重新加载相同的路由

php artisan config:cache 
这将清除env文件的缓存并重新加载它

php artisan view:clear 
这将清除应用程序的已编译视图文件

共享主机 大多数共享主机提供商不提供对系统的SSH访问。在这种情况下,您需要创建一条路线,并按如下方式拨打以下电话:

Route::get('/clear-cache', function() {
    Artisan::call('cache:clear');
    return "All cache cleared";
});

我知道这很旧,但对于本地开发人员来说,这是将内容返回到production.env文件的原因:

rm bootstrap/cache/config.php
然后


为了让Laravel重新读取它的.env文件,您不必重新启动webserver。Laravel在每次跑步时都会这样做。@max.lanin那么如果这不是问题,如果凭证正确,问题是什么?我正在运行
php artisan migrate
,以便应用迁移谢谢,但我已经尝试过了。无论如何,如果
.env
变量覆盖
config/app.php
变量,我为什么要检查此文件?它们没有。
config/app.php
文件将它们与
env()函数一起使用。所有的配置文件都可以。因此,我会检查
config/database.php
以查看对
env()
的调用是否使用了正确的名称。让我们看看,如果我让应用程序在本地与apache一起工作,我应该只调整服务器中
.env
文件中的一些值,对吗?如果
config/
文件中没有任何更改,我想一切都应该正常工作。damnmy laravel似乎无法通过默认运行
php artisan config:cache
来导入Dotenv,但实际上会清除缓存并重建它,因此如果您想继续使用缓存,我建议您不要只使用
config:clear
。但是,如果在缓存文件之外使用
env()
函数,则在缓存配置时将获得
NULL
值。因此,请确保只在缓存目录中的文件中使用
env()
,即使它解决了您的问题,您也不应该将“hack”标记为答案-这会鼓励不好的做法,但我必须使用以下两个导入:
使用Dotenv\Dotenv;使用Illumb\Foundation\Bootstrap\LoadConfigurationDB::reconnect()成功了。文档特别声明“您通常应该运行php artisan config:cache命令作为生产部署例程的一部分。该命令不应该在本地开发期间运行”
php artisan config:cache
php artisan config:clear
php artisan cache:clear