如何在生产环境中正确地使Symfony2应用程序的缓存失效?

13

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

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

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

如何重新加载缓存?


1
手动删除有什么不好的? - Gigala
如果您没有高负载,手动删除并没有什么不好的。只有缓存和日志文件夹的权限可能会失效。 - lisachenko
3个回答

24

你没有传递 env 参数:app/console cache:clear --env=prod --no-debug


1
谢谢!接受您的答案,只需更正一点:app/console cache:clear --env=prod --no-debug - lisachenko
1
自2.1版本的app/console中,如果没有提供--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';。详见https://github.com/symfony/symfony-standard/blob/master/app/console。 - Will B.

0
清除缓存并立即访问数据的解决方法是:
sudo app/console cache:clear --env=prod --no-warmup --no-debug

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

1
请注意,--no-warmup标志在cache:clear完成后防止生成基于新环境的缓存。延迟(缓存生成)将在首次运行应用程序时发生。 - Will B.

0

我相信你可以尝试执行以下命令:app/console cache:clear --no-warmup


谢谢,但我怀疑对于高负载来说杀死缓存不是一个好主意。我只需要优雅地重新加载配置。 - lisachenko
我相信你可以接着运行 app/console cache:clear - Ascherer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接