Desinstalando um Módulo


10

Estou tentando desinstalar um módulo (próprio) que instalei via compositor usando a CLI com este comando:

bin/magento module:uninstall -r [Namespace]_[Module]  

Com base na resposta fornecida aqui por @RyanH, criei o Setup/Uninstall.phparquivo que remove os dados relacionados ao banco de dados do módulo.

Isso funciona perfeitamente, mas o procedimento de desinstalação trava.

Até deixei o script em execução durante a noite e ainda o mesmo resultado.
Os arquivos de extensão ainda estão lá no vendormódulo.
Não toquei nas permissões ou no proprietário do arquivo.

O que dá certo:

  • os dados relacionados ao banco de dados são removidos
  • o nome do módulo é removido da tabela setup_module
  • o nome do módulo é removido de app/etc/config.php.

O que dá errado:

  • os arquivos do módulo ainda estão lá na vendorpasta.
  • o comando do console não termina.

Saída do console:

Você está prestes a remover tabelas de código e / ou banco de dados. Você tem certeza? [S / N] y
Ativando o modo de manutenção
Você está removendo dados sem um backup do banco de dados.
Removendo dados de [Namespace] _ [Module]
Removendo [Namespace] _ [Module] do registro do módulo no banco de dados
Removendo [Namespace] _ [Module] da lista de módulos na configuração de implantação
Removendo código do Magento codebase:

Depois disso, apenas trava.

Existe alguma maneira de terminar o processo de desinstalação ou pelo menos depurá-lo?


até eu estou enfrentando o mesmo problema. Qual é a solução para isso . Você tem alguma idéia
Vigna S

Não exatamente. A certa altura, começou a funcionar. Fiz uma depuração seguindo a resposta fornecida, mas não encontrei nada relevante.
Marius

ok obrigada !!! Então, como desinstalar o módulo
Vigna S

Execute o comando listado na pergunta
Marius

Estou usando apenas isso, mas ele ficou preso em 'Removendo código da base de código Magento:'. Após o que trava
Vigna S

Respostas:


3

A parte do processo de desinstalação em que ele está localizado pode ser encontrada em setup/src/Magento/Setup/Model/ModuleUninstaller.php:

public function uninstallCode(OutputInterface $output, array $modules)
{
    $output->writeln('<info>Removing code from Magento codebase:</info>');
    $packages = [];
    /** @var \Magento\Framework\Module\PackageInfo $packageInfo */
    $packageInfo = $this->objectManager->get('Magento\Framework\Module\PackageInfoFactory')->create();
    foreach ($modules as $module) {
        $packages[] = $packageInfo->getPackageName($module);
    }
    $this->remove->remove($packages);
}

Basicamente, ele lista os pacotes a serem removidos e, em seguida, executa um composer removecomando nesses pacotes através de lib/internal/Magento/Framework/Composer/Remove.php:

public function remove(array $packages)
{
    $composerApplication = $this->composerApplicationFactory->create();

    return $composerApplication->runComposerCommand(
        [
            'command' => 'remove',
            'packages' => $packages
        ]
    );
}

Você pode encontrar o runComposerCommandmétodo em vendor/magento/composer/src/MagentoComposerApplication.php:

public function runComposerCommand(array $commandParams, $workingDir = null)
{
    $this->consoleApplication->resetComposer();

    if ($workingDir) {
        $commandParams[self::COMPOSER_WORKING_DIR] = $workingDir;
    } else {
        $commandParams[self::COMPOSER_WORKING_DIR] = dirname($this->composerJson);
    }

    $input = $this->consoleArrayInputFactory->create($commandParams);

    $exitCode = $this->consoleApplication->run($input, $this->consoleOutput);

    if ($exitCode) {
        throw new \RuntimeException(
            sprintf('Command "%s" failed: %s', $commandParams['command'], $this->consoleOutput->fetch())
        );
    }

    return $this->consoleOutput->fetch();
}

Para mim, algo acontece ao longo do caminho aqui e essas funções são onde você deve começar a depurar.

Talvez o composer.jsonarquivo do módulo esteja ausente ou com um erro.


meu arquivo ccmposer está lá. Parece um bom lugar para iniciar a depuração. Obrigado.
Marius

anos depois, isso me ajudou a entender por que minhas desinstalações não funcionavam - eu tenho que chamar o compositor como / usr / local / bin / ea-php72 ~ / bin / compositer / compositer.phar e obviamente a configuração não é adequada para ele ...
iphigenie 26/01

0

quando rodamos o módulo bin / magento: uninstall Module_Name , ele executa o comando update do compositor também no processo anterior que não é mostrado no cli.

Quando executamos a atualização do compositor, é necessário um nome de usuário e senha na sua conta do Magento Market. se você ainda não criou:

Para criar chaves de autenticação:

  1. Faça login no Magento Marketplace . Se você não possui uma conta, clique em Registrar.

  2. Clique no nome da sua conta no canto superior direito da página e selecione Meu perfil.

  3. Clique em Chaves de acesso na guia Marketplace.

insira a descrição da imagem aqui

Execute este comando no diretório raiz do magento, ln -s ~/.composer/auth.json var/composer_home/ pois ele criará um link simbólico do seu compositor auth.json

Quando rodamos o módulo: uninstall, verifique o auth.json na pasta magento var ou no diretório raiz do magento.

Isso funciona para mim.


-1

O compositor parou de carregar dados de repo.magento.com

Meu auth.json não estava correto. Essa decisão me ajudou

config http-basic.repo.magento.com <public_key> <private_key>

Como usar o novo repo.magento.com

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.