如何完全关闭缓存?


26

我正在Drupal 7中开发一个站点,缓存大大降低了我的工作速度。例如,我有一个表单的主题功能。我很困惑,为什么它不起作用。直到我清除了缓存,然后将其修复。

如何将其完全关闭?

Answers:


21

主题功能由主题注册表处理:重建(或更糟糕的是,禁用)站点的所有缓存以获取新的主题功能是不必要的,而且会过分杀伤。

您可以做的是在每次重新加载页面时,使用Devel模块重建主题的注册表。安装后,转到配置→开发→开发设置。在那里,选中“在每次页面加载时重建主题注册表”,然后按“保存配置”按钮。完成开发后,请记住取消选中它(或者最好是完全禁用Devel)。


虽然这只是主题注册表。
安德鲁•韦尔奇

2
问题是“如何将其完全关闭?” 这只是它的一部分
SeanJA

29

您可以将默认的缓存后端替换为实际上不执行任何操作的后端。只需将其添加到您的settings.php文件中:

if (!class_exists('DrupalFakeCache')) {
  $conf['cache_backends'][] = 'includes/cache-install.inc';
}
// Default to throwing away cache data.
$conf['cache_default_class'] = 'DrupalFakeCache';
// Rely on the DB cache for form caching - otherwise forms fail.
$conf['cache_class_cache_form'] = 'DrupalDatabaseCache';

只是要确保,在“性能”页面上将缓存过期时间设置为无。

我实际上在settings.local.php文件中使用了该文件(如果存在),该文件包含在我的settings.php文件的底部,因此我可以将live.staging环境中的settings.php同步到我的开发环境中,而不必担心有关使用错误的数据库设置,不小心将开发设置推送到现场等的问题。

settings.php:

if (file_exists(__DIR__ . '/settings.local.php')) {
  require_once __DIR__ . '/settings.local.php';
}

4
您可以使用相同的技巧来关闭每个bin的缓存。例如。$conf['cache_class_cache_metatag'] = 'DrupalFakeCache';
Alfred Armstrong

4
这应该是被接受的答案,因为被接受的答案仅描述了如何禁用主题注册表缓存,而不是全部缓存
mastazi

10

您无法完全关闭所有缓存。而如果你真的做到了,那就你的进度放慢这么多。考虑一下实际上清除缓存所需的时间,这就是每个单页加载所需要的时间。

正在运行的钩子太多了,以生成有关可用实体,字段,表单,已实现的钩子等的信息,这些钩子当前仅需要执行一次,您不想阻止这种情况。

当您习惯了Drupal时,您将很快了解需要清除缓存的内容,并且可能与管理菜单快捷方式或变得友好起来drush cc all,而这不再是问题。


同意,一旦您意识到大多数新的钩子都需要清除缓存,然后才能从那里开始平稳航行!:)
Alex Weber

2
老实说,经过几个月的Drupal开发,我仍然发现这是一个问题。我相信,虽然本地开发速度并不重要,但是您没有多个用户发送并发请求。在大多数其他框架(Django,Symfony等)中,在本地进行开发时禁用高速缓存是一个容易使用的选项,我不明白为什么我在Drupal中也无法做到这一点。每天我至少有一个实例无法正常工作,原因是我忘了清理缓存,它确实经常发生,并且确实困扰着我。
mastazi

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.