如何修复Drupal执行drush cr时出现的database.replica_kill_switch服务不存在错误?
解决Drupal执行
drush cr报错“database.replica_kill_switch”不存在的问题 这个错误我之前帮不少开发者排查过,核心原因基本围绕数据库配置、版本兼容或自定义代码依赖这几个方向,给你一步步来排查:
1. 检查本地环境的数据库配置(settings.php)
- 首先打开
sites/default/settings.php,搜索$databases['default']['replica']相关配置。如果你的本地环境不需要读写分离(也就是没有配置副本数据库),但配置文件里保留了线上的replica数据库设置,就会触发这个错误——直接把这块配置注释掉或者删除即可。 - 另外,检查配置文件里有没有自定义代码手动调用了
database.replica_kill_switch服务,有的话暂时注释掉,先完成缓存清理再调试。
2. 验证Drush与Drupal版本的兼容性
不同版本的Drush对Drupal核心的依赖要求很严格,比如:
- Drush 9 适配 Drupal 8.4.x 及以上版本
- Drush 10 适配 Drupal 8.7.x+ 和 Drupal 9.x
- Drush 11+ 主要适配 Drupal 9.x 和 10.x
执行以下命令确认版本:
drush --version drush core-status
如果版本不匹配,建议调整Drush版本(本地环境用composer require drush/drush:^x.x来安装对应版本更方便)。
3. 排查第三方模块或自定义代码的问题
- 有些性能优化模块会依赖数据库副本切换功能,或者自定义模块里误引用了
database.replica_kill_switch服务。你可以先禁用所有非核心模块测试:
执行后再跑drush pm:uninstall --all-unneededdrush cr,如果缓存清理正常,再逐个启用模块排查是哪个模块导致的问题。 - 检查自定义模块的
services.yml文件和业务代码,确认有没有错误声明或调用这个服务,比如拼写错误或者依赖了线上环境才有的配置。
4. 手动清理缓存文件
如果自动缓存清理一直失败,试试手动清理:
- 删除
sites/default/files/php目录下的所有缓存文件 - 删除
vendor/composer/autoload_classmap.php,然后执行composer dump-autoload重新生成自动加载文件 - 最后再执行
drush cr尝试清理缓存
内容的提问来源于stack exchange,提问作者Sathish Sundar
相关产品推荐
相关产品推荐

