是否有一个Drush脚本来禁用所有缓存?


19

我的意思是admin / settings / performance下的所有缓存选项。我经常使用drush sql-sync使我的开发副本与服务器保持最新。但是,显然,服务器必须打开所有缓存。

所以我想知道:每次更新数据库时都必须访问admin / settings / performance吗?还是有一个Drush脚本?


1
只是一个简短的解释:chx的答案是最好的,因为它只需要'drush en cache_disable --yes'。GApple确实非常接近,因为它可以一劳永逸地解决问题,尽管这可能会伤害新手。doublejoice实际上提出了一个草稿脚本,虽然我的其他两个更好,但对我的问题却是一个很好的答案。
卡皮·埃瑟里尔

Answers:


6

D7的https://drupal.org/node/797346。对于D6,https: //drupal.org/project/cache_disable,但它会中断表单缓存。需要修补它以使其落入数据库缓存以进行表单缓存。并且可能也会更新状态缓存。


我会看一下,看看是否可以打补丁。非常感谢您的小费:)
Capi Etheriel 2011年

17

您需要设置几个变量来关闭开发站点上的缓存...

 drush vset cache 0
 drush vset preprocess_css 0
 drush vset preprocess_js 0
 drush vset page_cache_maximum_age 0
 drush vset views_skip_cache TRUE

如果您在settings.php文件中有条件配置,这将更加容易。然后,您可以刷新数据库,更改将保持不变!

$conf['cache'] = 0; // Page cache $conf['page_cache_maximum_age'] = 0; // External cache TTL $conf['preprocess_css'] = FALSE; // Optimize css $conf['preprocess_js'] = FALSE; // Optimize javascript $conf['views_skip_cache'] = TRUE; // Views caching

...不过,如果您只是通过管理用户界面关闭各种缓存并清除一次缓存,则可以在不关闭其余缓存的情况下删除主题...因为脚本更改的可能性较小。


您还可以从将代码推送到生产环境的存储库中排除settings.php文件,并添加以下设置...$conf = array( 'cache' => FALSE, //page cache 'block_cache' => FALSE, //block cache 'preprocess_css' => FALSE, //optimize css 'preprocess_js' => FALSE, //optimize javascript 'environment' => 'development' );
doublejosh 2011年

更多建议...$conf['cache'] = 0; $conf['page_cache_maximum_age'] = 0; $conf['block_cache'] = FALSE; $conf['preprocess_css'] = FALSE; $conf['preprocess_js'] = FALSE; $conf['views_skip_cache'] = TRUE;
doublejosh 2014年

11

您可以使用settings.php文件来显式设置变量以覆盖数据库设置。这些值将被锁定为文件中设置的任何值,并且无法通过管理界面进行更改。
默认文件的末尾是以下部分:

/**
 * Variable overrides:
 *
 * To override specific entries in the 'variable' table for this site,
 * set them here. You usually don't need to use this feature. This is
 * useful in a configuration file for a vhost or directory, rather than
 * the default settings.php. Any configuration setting from the 'variable'
 * table can be given a new value. Note that any values you provide in
 * these variable overrides will not be modifiable from the Drupal
 * administration interface.
 *
 * Remove the leading hash signs to enable.
 */
# $conf = array(
#   'site_name' => 'My Drupal site',
#   'theme_default' => 'minnelli',
#   'anonymous' => 'Visitor',

因此,要禁用页面,JS和CSS缓存,集cachepreprocess_jspreprocess_css所有人'0'

$conf = array(
  'cache' => '0',
  'preprocess_css' => '0',
  'preprocess_js' => '0',
);

数组声明的右括号是默认文件的最后一行,再加上一些注释块,因此请确保在此处取消注释,而不是添加新的注释。还要确保您没有其他$conf会冲突的声明。


2

您始终可以在开发服务器上使用drush别名文件,并将其设置为在运行sql-sync时跳过缓存表。以下将为本地开发服务器和远程实时服务器创建别名:

$aliases['dev'] = array(
    'root' => '/var/www/devroot',
);

$aliases['live'] = array(
    'root' => '/var/www/liveroot',
    'remote-host' => 'www.mysite.com',
    'remote-user' => 'exampleuser',
    'command-specific' => array (
       'sql-sync' => array (
         'skip-tables-list' => 'cache,cache_menu',
       ),
    ),
);

如果将其保存在主目录下:

~/.drush/mysite.aliases.drushrc.php

那么您可以像这样调用sql-sync命令:

drush sql-sync @mysite.live @mysite.dev

并且它应该跳过缓存表(显然,我只在其中列出了2个,但是您可以在其中列出任何内容,甚至可以在其中添加看门狗)。

有关别名和所有各种选项的更多信息,请在drush / examples / example.aliases.drushrc.php中查看drush安装中的示例文件。

最后,对于任何尝试使用sql-sync的人,我在第一次运行sql时都会遇到身份验证问题,因此,如果有人尝试此操作并遇到有关公钥/私钥的错误,请执行以下操作:

drush dl drush_extras
drush pushkey @mysite.live
drush @mysite.live status

drush_extras中的pushkey命令创建一个私钥/公钥对,并将公钥推入实时服务器。最后一个命令只是检查它是否起作用。


谢谢,答案很棒。但是我的问题是我的开发环境应该关闭缓存,并且我想避免每次更新时都访问admin / settings / performance。
Capi Etheriel

1

我写了一个drush命令,它启用/禁用以下所有选项:

cache
cache_lifetime
page_cache_maximum_age
preprocess_css
preprocess_js

示例和代码可以在这里找到:http : //ourlife01.blogspot.gr/2015/05/drush-command-to-enabledisable-cache.html

因此,要禁用所有上述选项,只需运行:

drush cache-disable

命令:

drush cache-enable

与将变量设置为值相同:

cache: TRUE
cache_lifetime: 1 minute
page_cache_maximum_age: 1 hour
preprocess_css: TRUE
preprocess_js: TRUE

很好,但是在重新启用缓存方面确实有自己的见解。禁用缓存或仅通过CLI提示询问用户时,最好保存以前的值。
卡皮·埃瑟里尔

您是正确的@barraponto,我修改了脚本并添加了帮助。新命令是drush cache-enable min max。检查上面的URL。
cyberp

新版本启用/禁用block cache以及..
cyberp

太棒了 是什么阻止您在drupal.org中发布它?
卡皮·埃瑟里尔

时间!我不知道该怎么做:)
cyberp

1

您也可以通过以下行禁用缓存,将其放入settings.php文件中

$conf['display_cache_disable'] = TRUE;
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.