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

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

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

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

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

【问题讨论】:

  • 手动删除有什么不好?
  • 如果你没有highload,手动删除也没什么不好。只有缓存和日志文件夹的权限会失效。

标签: caching reload symfony


【解决方案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 完成后生成基于新环境的缓存。延迟(缓存生成)将在应用程序第一次运行时发生。
猜你喜欢
  • 1970-01-01
  • 2010-12-15
  • 1970-01-01
  • 2012-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-22
相关资源
最近更新 更多