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

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.

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

Хафиз Умер
источник