php - 在生产环境中处理 Symfony 的缓存

标签 php symfony caching

我有一个正在生产中测试的 Symfony2 网站。我继续并清除了它的缓存,因为我已经并且可能会进行更多修改,但是有一个小问题:

当正在清除缓存并说,之后我想预热它时,访问该网站的人会重建缓存。这会产生一个小问题,因为缓存正在构建,但还没有完全构建,而其中一半被删除,因为删除仍在进行中。

之后发生的事情是,缓存已构建,但只是其中的一部分。 Symfony 认为缓存是完全构建的,并且运行时不再尝试构建它,但它运行在半构建的缓存上。删除过程有点长(~15 秒),因此在此时间范围内,没有人必须尝试通过访问网站来创建缓存。

要么,要么缓存完全建好,覆盖掉旧的缓存,系统把这些新文件当作旧文件,删除一部分,还有一部分保留。不完全确定,我不确定如何检查。

例如,我得到的错误之一是

The directory "D:\xampp\htdocs\med-app\app\app\cache\dev/jms_diextra/metadata" does not exist.

如果我不使用那个包,我会从 Doctrine 得到另一个缓存问题。这会出现在每次访问网站时,直到我在没有任何人访问该网站的情况下再次删除缓存。它完全阻止了对网站的访问并使其无法正常运行。

还有,热身呢?这也需要一段时间。如果有人在缓存正在预热时访问该网站怎么办?这不会也造成冲突吗?

如何处理这个问题?我是否需要关闭 apache 服务、清除和预热缓存然后重新启动 apache?如何处理生产中的网站?

编辑 我发现了一些有趣的事情。当我删除 cache/prod 文件夹时会出现该错误。如果我删除文件夹的内容而不删除文件夹本身,似乎不会发生错误。我想知道为什么。

最佳答案

如果您正在执行更新或出于任何其他原因在生产中清除缓存,通常最好将网站锁定到维护模式。有时网络托管服务有这个选项来为你处理这个,或者有一个 nice bundle用于从命令行轻松处理维护。

这样您就可以安全地删除缓存并确保没有人访问该页面并错误地重建缓存。

关于php - 在生产环境中处理 Symfony 的缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35288996/

相关文章:

javascript - 我们可以打开隐藏的选项卡或窗口并在该选项卡/窗口上自动提交表单吗?

php - 带锁定的用户友好视频审查

symfony - 为什么当我使用 Composer 更新依赖项时,parameters.yml 会丢失更改?

mongodb - 如何对集合中的数组进行排序

php - php Datetime 月份的doctrine2

javascript - 识别 Service Worker 缓存中的陈旧缓存条目

python - Django REST Framework 缓存错误

php - 烘焙模型 - CakePHP - Ubuntu

IIS 6 缓存静态图像

php - PC崩溃后Xampp mysql innodb恢复失败