Odinstalowywanie modułu

10

Próbuję odinstalować moduł (mój), który zainstalowałem za pomocą kompozytora za pomocą interfejsu CLI za pomocą tego polecenia:

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

Na podstawie odpowiedzi udzielonej tutaj przez @RyanH stworzyłem Setup/Uninstall.phpplik, który usuwa dane modułu związane z bazą danych.

Działa to doskonale, ale procedura dezinstalacji zawiesza się.

Nawet zostawiłem skrypt działający przez noc i wciąż ten sam rezultat.
Pliki rozszerzeń są nadal w vendormodule.
Nie dotknąłem uprawnień do plików ani właściciela.

Co idzie dobrze:

  • dane związane z bazą danych są usuwane
  • nazwa modułu jest usuwana z tabeli setup_module
  • nazwa modułu została usunięta z app/etc/config.php.

Co idzie nie tak:

  • pliki modułów są nadal w vendorfolderze.
  • polecenie konsoli nie kończy się.

Dane wyjściowe konsoli:

Zamierzasz usunąć kod i / lub tabele bazy danych. Czy na pewno? [T / n] y
Włączanie trybu konserwacji
Usuwasz dane bez kopii zapasowej bazy danych.
Usuwanie danych z [Przestrzeń nazw] _ [Moduł]
Usuwanie [Przestrzeń nazw] _ [Moduł] z rejestru modułu w bazie danych
Usuwanie [Przestrzeń nazw] _ [Moduł] z listy modułów w konfiguracji wdrożenia
Usuwanie kodu z bazy kodu Magento:

Po tym po prostu się zawiesza.

Czy jest tak czy inaczej, aby zakończyć proces odinstalowywania, czy przynajmniej go debugować?

Marius
źródło
nawet ja mam ten sam problem. Jakie jest na to rozwiązanie. Czy masz jakiś pomysł
Vigna S
Nie dokładnie. W pewnym momencie zaczęło działać. Debugowałem po podanej odpowiedzi, ale nie znalazłem nic istotnego.
Marius
ok dziękuję!!! Jak odinstalować moduł
Vigna S
Uruchom polecenie wymienione w pytaniu
Marius
Używam tylko tego, ale utknęło w nim, „Usuwanie kodu z bazy kodu Magento:”. Po czym zawiesza się
Vigna S

Odpowiedzi:

3

Część procesu odinstalowywania, w której ręce są dostępne, można znaleźć pod 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);
}

Zasadniczo zawiera listę pakietów do usunięcia, a następnie uruchom composer removepolecenie na tych pakietach poprzez lib/internal/Magento/Framework/Composer/Remove.php:

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

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

Możesz znaleźć runComposerCommandmetodę w 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();
}

Po drodze coś mi się dzieje, a te funkcje powinny rozpocząć debugowanie.

Być może composer.jsonbrakuje pliku modułu lub wystąpił błąd.

Raphael at Digital Pianism
źródło
mój plik ccmposer już tam jest. To wygląda na dobre miejsce do rozpoczęcia debugowania. Dzięki.
Marius
lata później pomogło mi to zrozumieć, dlaczego moje odinstalowania nie działały - muszę zadzwonić do kompozytora jak / usr / local / bin / ea-php72 ~ / bin / composer / composer.phar i oczywiście konfiguracja nie jest na to gotowa ...
iphigenie
0

kiedy uruchamiamy moduł bin / magento: odinstaluj Module_Name, następnie uruchom polecenie aktualizacji kompozytora również w procesie wstecz, który nie jest pokazany w cli.

Kiedy uruchamiamy aktualizację kompozytora, wymaga ona nazwy użytkownika i hasła do konta magento marketplace. jeśli nie masz, utwórz:

Aby utworzyć klucze uwierzytelniające:

  1. Zaloguj się do Magento Marketplace . Jeśli nie masz konta, kliknij Zarejestruj.

  2. Kliknij nazwę swojego konta w prawym górnym rogu strony i wybierz Mój profil.

  3. Kliknij opcję Klucze dostępu na karcie Marketplace.

wprowadź opis zdjęcia tutaj

Uruchom to polecenie z katalogu głównego magento ln -s ~/.composer/auth.json var/composer_home/ , aby utworzyć symboliczne łącze do twojego kompozytora auth.json

Kiedy uruchamiamy moduł: odinstaluj, a następnie sprawdź auth.json w folderze magento var lub katalogu głównym magento.

To działa dla mnie.

HaFiz Umer
źródło