如何安全地将模块移动到另一个文件夹?


7

我通过Drupal Console创建了一个模块,不幸的是它没有放置在自己的文件夹中,而是直接放入/modules/custom。在我注意到它去了哪里之前,我启用了该模块。

在Drupal 6/7中,这很容易解决-我可以从字面上将文件放入正确的路径,清除缓存(也许重建注册表,这不是一门确切的科学方法),一切都很好。

Drupal 8并非如此。我将文件移到了子文件夹中,并重建了缓存,所有请求都告诉我Drupal无法包含必需的文件。在特定的文件是一个块级和Drupal是试图找到它的路径是它使用的是,不要在那里我已经把它移到。

代码反对是在Symfony的中ApcClassLoader,所以我想我需要清除略高于Drupal头的内容才能更新此路径引用。

我怎样才能做到这一点?

卸载并重新安装模块确实可以,但是一旦存储了重要数据,就将无法选择。

我错了,卸载并重新安装不是一个可行的选择。卸载并重新安装后,Drupal无法再使用该模块定义的自定义块。我猜该引用被缓存在卸载模块时无法清除的地方。只需找出那是什么以及如何清除它...


因此,如果使用Drupal控制台创建first.module和second.module,是否在/ modules / custom中都找到了这两个文件?这样,我将永远不会创建带有该模块的模块。
kiamlaluno

我有一个旧版本@kiamlaluno,现在进行了升级,而该问题不存在。问题中最肯定的问题是,它实际上正在变得越来越严重。我刚刚添加了一个带有一个新模块的全新模块,而Drupal现在不会在管理页面中使用模块。确实在其配置中弄错了一些东西,但我不知道在哪里看:/
Clive

ApcClassLoader::findFile()从获取错误的路径apc_fetch(),还是修饰的类加载器返回错误的路径?
gapple

Answers:


11

只需重新启动apache。然后将重建APC缓存。

您也可以尝试点击rebuild.php或运行drush cr。这些都试图显式清除APC缓存。


是的,我做了同样的事情(nginx + fpm,但都重新启动了几次),再直接运行apc_flush_cache甚至在php5和7之间切换,所以完全不同的存储,仍然看到了问题,但我猜想这与我的设置有关,逻辑上说这些方法之一将解决它。明天将进行更仔细的观察
克莱夫(Clive)

夜间似乎已经修复了该问题,因此,我现在将对此进行介绍...
Clive

rebuild.php(在浏览器中打开)有所帮助,重新启动apache并清除缓存没有帮助。
drupalfan

我没有清除缓存,运行rebuild.php,apache重新启动。仍然无法正常工作,得到同样的错误。引用旧模块路径的块。
ARUN

0

另一个解决方案是放在您的settings.php中:

 /**
 * Class Loader.
 *
 * If the APC extension is detected, the Symfony APC class loader is used for
 * performance reasons. Detection can be prevented by setting
 * class_loader_auto_detect to false, as in the example below.
 */
$settings['class_loader_auto_detect'] = FALSE;

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.