Comment déplacer en toute sécurité un module vers un autre dossier?

7

J'ai créé un module via Drupal Console, malheureusement il n'a pas été placé dans son propre dossier, plutôt directement dans /modules/custom. Avant de remarquer où il était allé, j'ai activé le module.

Dans Drupal 6/7, c'était facile à corriger - je pouvais littéralement simplement mettre les fichiers dans le bon chemin, vider le cache (peut-être reconstruire le registre, ce n'était pas une science exacte), et tout allait bien.

La même chose n'est pas vraie pour Drupal 8; J'ai déplacé les fichiers dans un sous-dossier, reconstruit le cache et toutes les demandes m'indiquent que Drupal ne parvient pas à inclure un fichier requis. Le fichier particulier est une classe de bloc, et le chemin Drupal tente de le trouver est là où il sert d'être, où je suis passé à.

Le peu d'objection de code est dans Symfony ApcClassLoader, donc je suppose que je dois effacer quelque chose qui est légèrement au-dessus de la tête de Drupal pour obtenir cette référence de chemin d'accès mise à jour.

Comment puis je faire ça?

La désinstallation et la réinstallation du module fonctionnent, mais une fois qu'il y a des données importantes stockées, cela ne sera plus une option.

J'avais tort, désinstaller et réinstaller n'est pas une option viable. Après la désinstallation et la réinstallation, Drupal ne peut plus récupérer les blocs personnalisés définis par le module. Je suppose que la référence est mise en cache quelque part qui n'est pas effacée lorsque le module est désinstallé. Il suffit de savoir où cela se trouve et comment le supprimer ...

Clive
la source
Donc, si vous créez first.module et un second.module avec Drupal Console, trouvez-vous ces deux fichiers dans / modules / custom? Je ne créerai jamais de module avec ça, alors.
kiamlaluno
J'avais une ancienne version @kiamlaluno, mise à jour maintenant et ce problème n'est pas là. Le problème de la question est certainement que la situation empire. Je viens d'ajouter un tout nouveau module, avec un tout nouveau bloc, et Drupal ne récupérera plus ce bloc pour la page d'administration. Quelque chose est vraiment foiré dans sa config mais je ne sais pas où chercher: /
Clive
Le ApcClassLoader::findFile()mauvais chemin provient apc_fetch()-il ou le chargeur de classe décoré renvoie-t-il le mauvais chemin?
gapple

Réponses:

11

Redémarrez simplement Apache. Le cache APC sera alors reconstruit.

Vous pouvez également essayer de frapper rebuild.php ou d'exécuter drush cr. Ceux-ci tentent tous d'effacer explicitement le cache APC.

Berdir
la source
Oui, j'ai fait les mêmes choses (nginx + fpm mais redémarré plusieurs fois), en plus d'exécuter apc_flush_cache directement et même de basculer entre php5 et 7 magasins totalement différents, j'ai toujours vu le problème mais je suppose que c'est quelque chose avec ma configuration en particulier, la logique dit qu'une de ces méthodes pourrait le réparer. demain
Clive
La nuit semble l'avoir corrigé donc je vais y mettre une épingle pour le moment ...
Clive
rebuild.php (ouvert dans le navigateur) a aidé, redémarrer apache et vider le cache n'a pas aidé.
drupalfan
J'ai fait un cache clair, exécutez rebuild.php, redémarrez apache. Ne fonctionne toujours pas avec la même erreur. Bloque la référence à l'ancien chemin du module.
ARUN
0

Une autre solution est mise dans votre 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
la source
-1

Vous devez effacer le cache drupal. Voilà comment le faire avec drush:

drush cr
Somerussian
la source
Nous parlons ici de Drupal 8, cela fonctionne ci-dessus pour drupal 7.
Marko Blazekovic
Merci Marko, d'avoir mis à jour ma réponse pour la solution drupal 8.
Somerussian