重新加载.env变量而不重启服务器(Laravel 5,共享主机)

god*_*way 27 php mysql dreamhost laravel laravel-5

我的Laravel 5运行正常,直到配置数据库,然后发现此错误:

SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known
Run Code Online (Sandbox Code Playgroud)

做一些研究似乎我太晚配置了MySQL访问,所以我应该重启服务器以获得正确的环境变量.好吧,我正在使用Dreamhost的共享服务器而我无法做到这一点.

我该如何解决这个问题?

谢谢

Har*_*rry 59

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

运行php artisan config:clear来修复它.

  • 运行`php artisan config:cache`实际上*清除缓存*并*重建它*,所以如果你想继续使用缓存,我建议不要只使用`config:clear`.**但是,如果你在缓存文件之外使用`env()`函数,那么当你的配置被缓存时,你会得到'NULL`值.因此,请确保只在缓存目录中的文件中使用`env()` (8认同)

小智 14

您的配置变量可能会被缓存.验证您config/app.php和您的.env文件然后尝试

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

在命令行上.


Dib*_*Roy 12

需要明确的是,您可以根据具体情况清除 4 种类型的缓存。

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

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

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

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

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

这将清除 env 文件的缓存并重新加载它

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

这将清除应用程序的编译视图文件。

共享主机

大多数共享主机提供商不提供对系统的 SSH 访问。在这种情况下,您需要创建一个路由并调用以下行:

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


小智 8

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

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

然后

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


Mat*_*eIT 6

一个简短的解决方案:

use Dotenv;

with(new Dotenv(app()->environmentPath(), app()->environmentFile()))->overload();
with(new LoadConfiguration())->bootstrap(app());
Run Code Online (Sandbox Code Playgroud)

在我的情况下,我需要在以编程方式更改 .env 后重新建立数据库连接,但它没有用,如果你遇到这个麻烦试试这个

app('db')->purge($connection->getName()); 
Run Code Online (Sandbox Code Playgroud)

重新加载 .env 后,那是因为 Laravel App 之前可能已经访问了默认连接,并且\Illuminate\Database\DatabaseManager需要重新读取配置参数。


god*_*way -11

config/database.php我将默认的数据库连接从 mysql 更改为 sqlite 。我删除了该.env文件(实际上已重命名)并使用 .sqlite 文件创建了 sqlite 文件touch storage/database.sqlite。迁移工作使用 sqlite。

然后我将默认的数据库连接切换回config/database.phpmysql并恢复了.env文件。迁移工作与 mysql 一起进行。

我想这没有意义。也许是服务器端的东西。

  • 即使它解决了您的问题,您也不应该将“黑客”标记为答案 - 它会鼓励不良做法 (11认同)