Удаление модуля


10

Я пытаюсь удалить модуль (мой), который я установил через композитор, используя CLI с этой командой:

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

Основываясь на ответе, предоставленном здесь @RyanH, я создал Setup/Uninstall.phpфайл, который удаляет связанные с базой данных данные модуля.

Это работает отлично, но процедура удаления зависает.

Я даже оставил сценарий, работающий в течение ночи и все тот же результат.
Файлы расширений все еще есть в vendorмодуле.
Я не трогал файл разрешения или владельца.

Что идет правильно:

  • данные, связанные с базой данных, удалены
  • имя модуля удалено из таблицы setup_module
  • имя модуля удалено из app/etc/config.php.

Что идет не так:

  • файлы модуля все еще находятся в vendorпапке.
  • консольная команда не завершается.

Консольный вывод:

Вы собираетесь удалить таблицы кода и / или базы данных. Вы уверены? [Y / N] y
Включение режима обслуживания
Вы удаляете данные без резервной копии базы данных.
Удаление данных [Пространство имен] _ [Модуль]
Удаление [Пространство имен] _ [Модуль] из реестра модулей в базе данных
Удаление [Пространство имен] _ [Модуль] из списка модулей в конфигурации развертывания
Удаление кода из базы кода Magento:

После этого просто висит.

Есть ли способ завершить процесс удаления или хотя бы отладить его?


даже я сталкиваюсь с той же проблемой. Какое решение для этого. Есть ли у вас какие-либо идеи
Vigna S

Не совсем. В какой-то момент это начало работать. Я сделал отладку после предоставленного ответа, но не нашел ничего релевантного.
Мариус

хорошо спасибо!!! Итак , как удалить модуль
Винья S

Запустите команду, указанную в вопросе
Мариус

Я использую только это, но он застрял, «Удаление кода из базы кода Magento:». После чего он висит
Vigna S

Ответы:


3

Часть процесса удаления, где он находится, можно найти в разделе 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);
}

По сути, в нем перечислены пакеты, которые необходимо удалить, а затем выполните composer removeкоманду для этих пакетов с помощью lib/internal/Magento/Framework/Composer/Remove.php:

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

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

Вы можете найти runComposerCommandметод в 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();
}

Для меня что-то происходит по пути здесь, и эти функции, где вы должны начать отладку.

Возможно, ваш composer.jsonфайл модуля отсутствует или имеет ошибку.


мой файл ccmposer есть. Это похоже на хорошее место для начала отладки. Спасибо.
Мариус

Спустя годы это помогло мне понять, почему мои деинсталляции не работали - мне нужно вызвать composer как / usr / local / bin / ea-php72 ~ / bin / composer / composer.phar и, очевидно, конфигурация не подходит для этого ...
Ифигение

0

когда мы запускаем модуль bin / magento: деинсталлируем Module_Name, затем он запускает команду обновления composer также в обратном процессе, который не показан в cli.

Когда мы запускаем обновление composer, тогда для него требуется имя пользователя и пароль, которые вы используете для входа в ваш magento marketplace. если нет, то создайте:

Чтобы создать ключи аутентификации:

  1. Войдите в Magento Marketplace . Если у вас нет учетной записи, нажмите Зарегистрироваться.

  2. Нажмите на имя вашей учетной записи в правом верхнем углу страницы и выберите Мой профиль.

  3. Нажмите Ключи доступа на вкладке Marketplace.

введите описание изображения здесь

Запустите эту команду из корневого каталога magento,ln -s ~/.composer/auth.json var/composer_home/ она создаст символическую ссылку вашего композитора auth.json

Когда мы запускаем модуль: удалите, тогда он проверяет auth.json в папке magento var или в корневом каталоге magento.

Это работает для меня.


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.