Come posso spostare in sicurezza un modulo in un'altra cartella?


7

Ho creato un modulo tramite Drupal Console, sfortunatamente non è stato inserito in una cartella a sé stante, piuttosto direttamente /modules/custom. Prima di notare dove fosse andato, ho abilitato il modulo.

In Drupal 6/7, questo era facile da risolvere: potevo letteralmente mettere i file nel percorso corretto, svuotare la cache (forse ricostruire il registro, non era una scienza esatta) e tutto andava bene.

Lo stesso non è vero per Drupal 8; Ho spostato i file in una sottocartella, ho ricostruito la cache e tutte le richieste mi dicono che Drupal non riesce a includere un file richiesto. Il file particolare, è una classe di blocco, e il percorso Drupal sta cercando di trovare è dove è usato per essere, non dove mi sono trasferito a.

La parte dell'obiezione del codice è in Symfony ApcClassLoader, quindi credo di dover cancellare qualcosa che è leggermente sopra la testa di Drupal per ottenere questo riferimento al percorso aggiornato.

Come lo posso fare?

La disinstallazione e la reinstallazione del modulo funzionano, ma una volta archiviati i dati importanti non sarà più un'opzione.

Ho sbagliato, disinstallare e reinstallare non è un'opzione praticabile. Dopo aver disinstallato e reinstallato, Drupal non può più raccogliere i blocchi personalizzati definiti dal modulo. Immagino che il riferimento sia memorizzato nella cache da qualche parte che non viene cancellato quando il modulo viene disinstallato. Devo solo scoprire dov'è e come cancellarlo ...


Quindi, se crei first.module e second.module con Drupal Console, trovi entrambi questi file in / modules / custom? Non creerò mai un modulo con quello, quindi.
kiamlaluno

Avevo una vecchia versione @kiamlaluno, aggiornata ora e quel problema non c'è. Il problema nella domanda è sicuramente, però, sta peggiorando. Ho appena aggiunto un modulo nuovo di zecca, con un blocco nuovo di zecca, e Drupal ora non raccoglierà quel blocco per la pagina di amministrazione. Qualcosa è davvero rovinato nella sua configurazione ma non so dove cercare: /
Clive

Sta ApcClassLoader::findFile()ottenendo il percorso sbagliato apc_fetch()o il caricatore di classe decorato sta restituendo il percorso sbagliato?
gapple,

Risposte:


11

Basta riavviare apache. La cache APC verrà quindi ricostruita.

Puoi anche provare a colpire rebuild.php o eseguire drush cr. Tutti tentano di cancellare esplicitamente la cache APC.


Sì, ho fatto le stesse cose (nginx + fpm ma ho riavviato entrambe le volte), oltre a eseguire direttamente apc_flush_cache e persino a passare da php5 a 7 negozi così totalmente diversi, ho ancora visto il problema ma suppongo sia qualcosa con la mia configurazione specifica, la logica dice che uno di quei metodi lo risolverebbe. guarderemo più da vicino domani
Clive

La notte sembra aver risolto il problema, quindi ho intenzione di mettere un perno in questo per ora ...
Clive

rebuild.php (aperto nel browser) ha aiutato, riavviare apache e svuotare la cache non ha aiutato.
drupalfan,

Ho cancellato la cache, ho eseguito buildild.php, riavvio di Apache. Non funziona ancora ottenendo lo stesso errore. Blocchi che fanno riferimento al vecchio percorso del modulo.
ARUN,

0

Un'altra soluzione è inserita in 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;

-1

È necessario svuotare la cache di Drupal. Ecco come farlo con Drush:

drush cr

Stiamo parlando di Drupal 8, questo sopra funziona per Drupal 7.
Marko Blazekovic,

Grazie Marko, ho aggiornato la mia risposta per la soluzione drupal 8.
Somerussian
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.