如何正确地使 Symfony2 应用程序的生产缓存无效?

Posted

技术标签:

【中文标题】如何正确地使 Symfony2 应用程序的生产缓存无效?【英文标题】:How to correctly invalidate cache on production for Symfony2 application? 【发布时间】:2011-10-23 02:01:57 【问题描述】:

我更改了应用程序的配置并将新代码部署到生产服务器。由于应用程序不解析配置文件并使用预编译类,我需要更新缓存文件。

app/console cache:warmupapp/console cache:clear 命令。但是调用这些命令后缓存没有更新,所以我不得不手动删除 app/cache 文件夹。

手动删除是非常危险的操作,因为它不是原子的,所以我可以在请求期间删除部分缓存,这可能会导致致命错误。

我应该如何重新加载缓存?

【问题讨论】:

手动删除有什么不好? 如果你没有highload,手动删除也没什么不好。只有缓存和日志文件夹的权限会失效。 【参考方案1】:

我相信你可以试试 app/console cache:clear --no-warmup

【讨论】:

谢谢,但我怀疑对于 highload 来说杀死缓存不是一个好主意。我只需要优雅地重新加载配置。 我相信你可以通过app/console cache:clear跟进这一点【参考方案2】:

你错过了env参数:app/console cache:clear --env=prod --no-debug

【讨论】:

谢谢!通过一个修复来接受您的答案:app/console cache:clear --env=prod --no-debug 自 2.1 应用程序/控制台以来,当未提供 --env 标志时,它将默认为 getenv('SYMFONY_ENV')dev。此外,如果提供了--env=prod,它将强制--no-debug 在2.1 之前需要显式传递--no-debug $env = $input->getParameterOption(array('--env', '-e'), getenv('SYMFONY_ENV') ?: 'dev'); $debug = getenv('SYMFONY_DEBUG') !== '0' && !$input->hasParameterOption(array('--no-debug', '')) && $env !== 'prod'; github.com/symfony/symfony-standard/blob/master/app/console【参考方案3】:

要清除缓存并立即访问数据,我的解决方法是

sudo app/console cache:clear --env=prod --no-warmup --no-debug

使用此命令会关闭调试,并且在再次访问数据之前没有预热时间

【讨论】:

请记住,--no-warmup 标志可防止在 cache:clear 完成后生成基于新环境的缓存。延迟(缓存生成)将在应用程序第一次运行时发生。

以上是关于如何正确地使 Symfony2 应用程序的生产缓存无效?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Symfony 2 中进入维护模式以安全地更新生产应用程序?

如何正确地使表单或窗口控件 RecreateWnd 感知?

使用 Monolog 在 Symfony2 中记录 PHP 致命错误

如何为 Symfony2 站点正确设置 Varnish?

Symfony2 学说清除缓存

Symfony2 删除生产中的“if-modified-since”参数