Laravel 工匠:Redis 关闭 - config:cache 失败并出现 ConnectionException

Laravel artisan: Redis down - config:cache fails with ConnectionException

提问人:tone7 提问时间:11/9/2023 更新时间:11/9/2023 访问量:37

问:

我有一个远程Redis缓存,它关闭了。我尝试通过.env更改配置,然后在服务器上运行以使用其他服务器。但是,这不起作用,并导致了 .我的问题是:为什么它试图连接到redis来更新/缓存配置?将来如何防止这种情况发生?我做错了什么吗?任何帮助将不胜感激!php artisan config:cachePredis\Connection\ConnectionException

发现 6 年前的这个线程有同样的问题。但是,不幸的是,没有解决方案。

Laravel 缓存 配置 Laravel-Artisan

评论

0赞 aynber 11/9/2023
您可以在 中定义缓存存储,因此,如果您现在不希望它使用 Redis,请将其更改为其他内容。检查以查看您的其他选项,但目前可能有效。.envconfig/cache.phpfile
1赞 aynber 11/9/2023
也就是说,我不知道是否有办法在Redis服务器发生故障时提供“备份缓存”选项。
0赞 tone7 11/9/2023
我确实更改了 .env 中的相关设置。问题是无法读取新配置,因为它之前被缓存了。正在运行或导致异常。artisan config:cacheartisan config:clear

答:

1赞 CAAHS 11/9/2023 #1

您是否尝试过在应用程序配置中禁用缓存?否则,只要缓存关闭,你就会看到一个连接异常,因为你已经将Laravel配置为这样做(抛出异常)。

您还需要清除所有现有缓存,因为 Laravel 会保留配置,以便正在运行的应用程序可能无法识别新设置,因为旧设置正在使用中,直到重新加载所有内容。

这很容易被忽略,因为所有措辞都表明配置将在环境后期注入。但事实并非如此,这发生得很早,需要您“重新启动”应用程序:

  1. 关闭 Laravel 运行的应用服务器
  2. 关闭 Laravel 运行的进程管理器(如果有)
  3. 删除所有临时文件(或从项目中重新部署原始副本)
  4. 从应用程序所处的干净状态配置应用程序。
  5. 然后再次启动运行 Laravel 应用程序的应用程序服务器。

之所以如此,是因为这可能很多(不仅取决于应用程序配置,还取决于服务器和管理器),因此此列表可能会显得更长,因为它需要用于您的特定配置,但是由于您很难找到罪魁祸首,我认为分享整个过程是件好事。

简短的回答应该是:使用更改的配置重新部署现有应用程序修订版。在发现部署过程中的所有漏洞(例如过时的缓存)时,请修复它们。这将随着每次部署而变得更加流畅。

评论

0赞 tone7 11/9/2023
这就是通过更改配置并重新部署应用程序来重新启动 nginx 并清除配置等最终解决方法。我只是认为当您尝试缓存配置设置时,redis抛出异常是没有意义的。
0赞 CAAHS 11/10/2023
是的,这显然似乎没有必要(投掷),缓存可能会掉下来,但是在另一边,您想知道配置是否损坏。现在,您不能同时拥有这两件事,并且抛出异常通常更安全,否则很容易错过配置错误,因为这些进程中的大多数都旨在无人值守地运行。“快速故障系统通常被设计为停止正常运行,而不是试图继续一个可能有缺陷的过程。
0赞 tone7 11/13/2023
但这里的情况并非如此。我正在主动将配置从“损坏”状态更改为固定状态,但系统无法更新到新配置。
0赞 CAAHS 11/13/2023
@tone7:难道是不扔?对不起,如果这是显而易见的,因为我不完全确定每个设置,在我的项目中,它说它正在直接清除缓存的引导文件。可能仍然有一个泄漏的抽象思想,但从我的理解来看,之后应用程序应该再次引导并进行任何配置更改。artisan optimize:clear