Como posso mover com segurança um módulo para outra pasta?

7

Eu criei um módulo através do Drupal Console, infelizmente ele não foi colocado em uma pasta própria, e sim diretamente /modules/custom. Antes de perceber para onde havia ido, ativei o módulo.

No Drupal 6/7, isso era fácil de corrigir - eu podia literalmente simplesmente colocar os arquivos no caminho correto, limpar o cache (talvez reconstruir o registro, não era uma ciência exata) e tudo estava bem.

O mesmo não se aplica ao Drupal 8; Movi os arquivos para uma subpasta, recompilei o cache e todas as solicitações informam que o Drupal não está conseguindo incluir o arquivo necessário. O arquivo em particular é uma classe de bloco, e o caminho que o Drupal está tentando encontrar é onde costumava estar, não para onde eu o mudei.

O pouco de objeção de código está no Symfony ApcClassLoader, então acho que preciso limpar algo que está um pouco acima da cabeça do Drupal para atualizar essa referência de caminho.

Como eu posso fazer isso?

Desinstalar e reinstalar o módulo funciona, mas quando houver dados importantes armazenados, não será mais uma opção.

Eu estava errado, desinstalar e reinstalar não é uma opção viável. Após desinstalar e reinstalar, o Drupal não pode mais pegar os blocos personalizados que o módulo define. Suponho que a referência seja armazenada em cache em algum lugar que não seja limpo quando o módulo for desinstalado. Só preciso descobrir onde está e como limpá-lo ...

Clive
fonte
Portanto, se você criar first.module e um second.module com o Drupal Console, encontrará esses arquivos em / modules / custom? Nunca vou criar um módulo com isso, então.
kiamlaluno
Eu tinha uma versão antiga @kiamlaluno, atualizei agora e esse problema não existe. Definitivamente, o problema na pergunta é: está realmente piorando. Acabei de adicionar um módulo totalmente novo, com um novo bloco, e o Drupal agora não receberá esse bloco para a página de administração. Algo foi realmente ferrado em sua configuração, mas não sei para onde procurar: /
Clive
Está ApcClassLoader::findFile()obtendo o caminho errado apc_fetch()ou o carregador de classes decorado está retornando o caminho errado?
gapple 27/01

Respostas:

11

Apenas reinicie o apache. O cache da APC será reconstruído então.

Você também pode tentar pressionar rebuild.php ou executar drush cr. Todos esses tentam limpar explicitamente o cache da APC.

Berdir
fonte
Sim, eu fiz as mesmas coisas (nginx + fpm, mas reiniciei as duas vezes), além de executar apc_flush_cache diretamente e até alternar entre php5 e 7 lojas totalmente diferentes, ainda vi o problema, mas acho que é algo com minha configuração especificamente, lógica diz que um desses métodos o consertaria. amanhã vamos olhar mais de perto
Clive
A noite parece ter resolvido, então eu vou colocar um alfinete nisso por enquanto ...
Clive
O rebuild.php (aberto no navegador) ajudou, reiniciar o apache e limpar o cache não ajudou.
precisa saber é o seguinte
Eu fiz cache limpo, execute rebuild.php, apache restart. Ainda não está funcionando, recebendo o mesmo erro. Blocos referentes ao caminho do módulo antigo.
ARUN 22/02
0

Outra solução é colocada em seu 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
fonte
-1

Você deve limpar o cache do drupal. É assim que se faz com drush:

drush cr
Somerussian
fonte
Nós estamos falando aqui sobre Drupal 8, isso funciona acima para o Drupal 7.
Marko Blazekovic
Obrigado Marko, atualizei minha resposta para a solução drupal 8.
Somerussian