¿Cómo puedo mover con seguridad un módulo a otra carpeta?

7

Creé un módulo a través de la Consola Drupal, desafortunadamente no se colocó en una carpeta propia, sino directamente /modules/custom. Antes de darme cuenta de dónde había ido, habilité el módulo.

En Drupal 6/7, esto fue fácil de solucionar: literalmente pude poner los archivos en la ruta correcta, borrar el caché (tal vez reconstruir el registro, no era una ciencia exacta), y todo estuvo bien.

Lo mismo no es cierto para Drupal 8; Moví los archivos a una subcarpeta, reconstruí el caché, y todas las solicitudes me dicen que Drupal no puede incluir un archivo requerido. El archivo en particular es una clase de bloque, y la ruta que Drupal está tratando de encontrar es donde solía estar, no donde lo he movido.

La parte de la objeción de código está en Symfony's ApcClassLoader, así que supongo que necesito borrar algo que está ligeramente por encima de la cabeza de Drupal para actualizar esta referencia de ruta.

¿Cómo puedo hacer eso?

Desinstalar y volver a instalar el módulo funciona, pero una vez que haya datos importantes almacenados, no será una opción.

Me equivoqué, desinstalar y reinstalar no es una opción viable. Después de desinstalar y reinstalar, Drupal ya no puede recoger los bloques personalizados que define el módulo. Supongo que la referencia se almacena en caché en algún lugar que no se borra cuando se desinstala el módulo. Solo necesito averiguar dónde está eso y cómo borrarlo ...

Clive
fuente
Entonces, si crea first.module y second.module con Drupal Console, ¿encuentra ambos archivos en / modules / custom? Nunca crearé un módulo con eso, entonces.
kiamlaluno
Tenía una versión antigua @kiamlaluno, actualizada ahora y ese problema no está allí. Sin embargo, el problema en la pregunta definitivamente es que en realidad está empeorando. Acabo de agregar un nuevo módulo, con un nuevo bloque, y Drupal ahora no recogerá ese bloque para la página de administración. Algo realmente está jodido dentro de su configuración, pero no sé dónde buscar: /
Clive
¿Está ApcClassLoader::findFile()obteniendo la ruta incorrecta apc_fetch()o el cargador de clases decorado está devolviendo la ruta incorrecta?
gapple

Respuestas:

11

Simplemente reinicie apache. El caché APC se reconstruirá entonces.

También puede intentar presionar rebuild.php o ejecutar drush cr. Todos intentan borrar explícitamente el caché de APC.

Berdir
fuente
Sí, hice lo mismo (nginx + fpm pero reinicié varias veces), además de ejecutar apc_flush_cache directamente e incluso cambiar entre php5 y 7 tiendas tan diferentes, aún vi el problema, pero supongo que es algo con mi configuración específicamente, lógica dice que uno de esos métodos lo solucionaría. tendrá un vistazo más de cerca mañana
Clive
La noche parece haberlo arreglado, así que voy a poner un alfiler en esto por ahora ...
Clive
rebuild.php (abrir en el navegador) ayudó, reiniciar apache y borrar el caché no ayudó.
drupalfan
Limpié la memoria caché, ejecuté rebuild.php, reinicio apache. Todavía no funciona obteniendo el mismo error. Bloques que hacen referencia a la ruta del módulo anterior.
ARUN
0

Otra solución se pone en su 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;
rpayanm
fuente
-1

Debe borrar el caché de drupal. Así es como se hace con drush:

drush cr
Somerussian
fuente
Estamos hablando de Drupal 8, lo anterior funciona para Drupal 7.
Marko Blazekovic
Gracias Marko, he actualizado mi respuesta para la solución drupal 8.
Somerusiano