Magento 2.2.x缓存自动禁用


16

首先,我在网络上的任何地方都找不到有关此类问题的任何信息。

我们有一个具有git集成的生产环境。我们仅通过git(git pull)将更改拉入

问题是,在某些步骤之一中,Magento 缓存会自动禁用(检查cache:status时全为零)。如果通过编程器遗漏了该问题,则会导致问题,这是由于高流量对没有缓存的Magento的“重击”导致服务器过载。

也许有些人以前见过这个问题?我们不知道它什么时候发生或如何发生。
而且有点随机出现。

我们执行的通常步骤:

  • 进行维护
  • git pull
  • 作曲家安装(如果需要)
  • 模块启用Vendor_ModuleName(如果需要)
  • 设置:升级(如果需要)
  • 清除静电
  • 部署命令
  • 清除缓存
  • 清除操作缓存
  • 禁用维护

我将不胜感激任何有助解决此类问题的宝贵建议。


如果您这样做,setup:upgrade则缓存将自动禁用
Amit Bera

@AmitBera我必须不同意您的意见,即使我中断了此命令,也不会打开缓存
Macas

好的。我将进行测试。...请参阅检查screnerio
阿米特·贝拉

Answers:


16

这似乎是一个已知的问题
这确实会在我正在从事的项目中不时发生,但是我找不到重现的步骤。我只能说这是在部署过程中发生的。
我能发现的是,在某些情况下(在安装程序升级或composer安装/升级时)会将文件.regenerate写入var文件夹,并且在运行setup:di:compile缓存时是否存在该文件,并在编译过程完成后重新启用。
由于某些原因,有时无法重新启用缓存。
我们采取了快速而肮脏的方法,并确定了部署过程的最后一步php bin/magento cache:enable。所以基本上我们把灰尘藏在地毯下。

您可以在此处找到禁用缓存的代码。
它包装在一条TODO: remove语句中。


1
可以确认。发生时将其隐藏在地毯下
Philipp Sander

好的,看来我不是唯一一个这样做的人。通常在发生错误且部署过程崩溃时会得到此信息。通过查看您的信息,情况就是如此。感谢您提供此信息,将其标记为答案。
马卡斯

有没有人得到解决方案?
Manish Goswami,

5

对于任何有兴趣的人,我想我可以为这个问题提供一些启示。当设置了var / .regenerate标志并且多个进程/请求尝试清理生成的文件时,这似乎是\ Magento \ Framework \ Code \ GeneratedFiles :: cleanGeneratedFiles中并发(争用条件)问题

启用cron以及使用use_separate_process配置的许多cron组时,更可能发生这种情况。当多个进程试图清除同一进程时,FileIterator失败,并显示以下类似的不同消息:FilesystemIterator::__construct(/Users/adrianmartinez/Sites/r2-project-develop-b2b/environments/2-2-develop-b2b/magento/generated/code): failed to open dir: No such file or directory.

$this->write->delete(self::REGENERATE_FLAG);标志存在检查后,将调用移至即可解决问题,因为第一个到达的进程将其自身标记为负责清理文件。

我在这里留下了有关如何复制问题演示视频https : //youtu.be/9-X1cIIY7y8

和用于它的脚本:

#!/bin/bash

# \Magento\Framework\Code\GeneratedFiles has a concurrency problem
# Create regenerate flag and launch parallel commands that try to regenerate at the same time
# This is a real case, cron:run launches stand alone processes in parallel

# Created by magento composer installer upon code install or module enable/disable
touch var/.regenerate

# Launch parallel commands
# Error differs each execution, sometimes it even works
bin/magento cron:run --group=ddg_automation --bootstrap=standaloneProcessStarted=1 2>&1 &
bin/magento cron:run --group=index --bootstrap=standaloneProcessStarted=1 2>&1 &

wait
echo "All done"

您找到解决方案了吗?
Manish Goswami,

我发现了如何重现此问题,但没有找到解决方案。 github.com/magento/magento2/issues/17634
Manish Goswami
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.