Php 在不重新启动服务器的情况下重新加载.env变量(Laravel 5,共享主机)
My 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以及
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\LoadConfiguration当涉及到数据库时,DB::reconnect()代码>成功了。文档特别声明“您通常应该运行php artisan config:cache命令作为生产部署例程的一部分。该命令不应该在本地开发期间运行”
php artisan config:cache
php artisan config:clear
php artisan cache:clear