如何正确地使 Symfony2 应用程序的生产缓存无效?
Posted
技术标签:
【中文标题】如何正确地使 Symfony2 应用程序的生产缓存无效?【英文标题】:How to correctly invalidate cache on production for Symfony2 application? 【发布时间】:2011-10-23 02:01:57 【问题描述】:我更改了应用程序的配置并将新代码部署到生产服务器。由于应用程序不解析配置文件并使用预编译类,我需要更新缓存文件。
有app/console cache:warmup
和app/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 中进入维护模式以安全地更新生产应用程序?