Désinstaller un module

10

J'essaie de désinstaller un module (le mien) que j'ai installé via composer à l'aide de CLI avec cette commande:

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

Sur la base de la réponse fournie ici par @RyanH, j'ai créé le Setup/Uninstall.phpfichier qui supprime les données liées à la base de données du module.

Cela fonctionne parfaitement mais la procédure de désinstallation se bloque.

J'ai même laissé le script tourner pendant la nuit et toujours le même résultat.
Les fichiers d'extension sont toujours là dans le vendormodule.
Je n'ai pas touché les autorisations de fichier ou le propriétaire.

Ce qui va bien:

  • les données liées à la base de données sont supprimées
  • le nom du module est supprimé de la table setup_module
  • le nom du module est supprimé de app/etc/config.php.

Ce qui ne va pas:

  • les fichiers du module sont toujours là dans le vendordossier.
  • la commande console ne se termine pas.

Sortie console:

Vous êtes sur le point de supprimer du code et / ou des tables de base de données. Êtes-vous sûr? [Y / N] y
Activation du mode de maintenance
Vous supprimez des données sans sauvegarde de base de données.
Suppression des données de [Namespace] _ [Module]
Suppression de [Namespace] _ [Module] du registre de modules dans la base de données
Suppression de [Namespace] _ [Module] de la liste des modules dans la configuration de déploiement
Suppression de code de la base de code Magento:

Après cela, il se bloque simplement.

Est-il possible de terminer le processus de désinstallation ou au moins de le déboguer?

Marius
la source
même moi, je suis confronté au même problème. Quelle est la solution pour cela . Avez-vous une idée
Vigna S
Pas exactement. À un moment donné, il a commencé à fonctionner. J'ai fait un débogage suite à la réponse fournie mais je n'ai rien trouvé de pertinent.
Marius
D'accord, merci!!! Alors, comment désinstaller le module
Vigna S
Exécutez la commande répertoriée dans la question
Marius
Je n'utilise que cela, mais il est resté, 'Suppression de code de la base de code Magento:'. Après quoi il se bloque
Vigna S

Réponses:

3

La partie du processus de désinstallation où il est possible se trouve sous 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);
}

Fondamentalement, il répertorie les packages à supprimer, puis exécute une composer removecommande sur ces packages via lib/internal/Magento/Framework/Composer/Remove.php:

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

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

Vous pouvez trouver la runComposerCommandméthode dans 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();
}

Pour moi, quelque chose se passe en cours de route et ces fonctions sont l'endroit où vous devriez commencer le débogage.

Votre composer.jsonfichier de module est peut-être manquant ou contient une erreur.

Raphael chez Digital Pianism
la source
mon fichier ccmposer est là. Cela semble être un bon endroit pour commencer le débogage. Merci.
Marius
des années plus tard, cela m'a aidé à comprendre pourquoi mes désinstallations n'ont pas fonctionné - je dois appeler composer comme / usr / local / bin / ea-php72 ~ / bin / composer / composer.phar et, évidemment, la configuration n'est pas prête ...
iphigenie
0

lorsque nous exécutons le module bin / magento: désinstallez Module_Name puis exécutez la commande de mise à jour du compositeur également dans le processus arrière qui n'est pas affiché dans cli.

Lorsque nous exécutons la mise à jour du compositeur, il faut un nom d'utilisateur et un mot de passe pour votre compte de marché magento. si vous ne l'avez pas encore créé:

Pour créer des clés d'authentification:

  1. Connectez-vous à Magento Marketplace . Si vous n'avez pas de compte, cliquez sur S'inscrire.

  2. Cliquez sur le nom de votre compte en haut à droite de la page et sélectionnez Mon profil.

  3. Cliquez sur Clés d'accès dans l'onglet Marketplace.

entrez la description de l'image ici

Exécutez cette commande à partir de votre répertoire racine magento, ln -s ~/.composer/auth.json var/composer_home/ cela créera un lien symbolique de votre compositeur auth.json

Lorsque nous exécutons le module: désinstallez, puis vérifiez auth.json dans le dossier var magento ou le répertoire racine magento.

Ça marche pour moi.

HaFiz Umer
la source