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


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

Не зовсім. Одного разу він почав працювати. Я зробив налагодження за наданою відповіддю, але не знайшов нічого релевантного.
Маріус

добре, дякую!!! Тож як видалити модуль
Vigna 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 є. Це виглядає як хороше місце для початку налагодження. Дякую.
Маріус

через кілька років це допомогло мені зрозуміти, чому мої видалення не спрацювали - я повинен викликати композитора, як / usr / local / bin / ea-php72 ~ / bin / composer / composer.phar, і, очевидно, конфігурація не для цього ...
iphigenie

0

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

Коли ми запускаємо оновлення композитора, тоді для вашого облікового запису magento market потрібно використовувати ім’я користувача та пароль. якщо ви ще не створили:

Щоб створити ключі аутентифікації:

  1. Увійдіть на ринок Magento . Якщо у вас немає облікового запису, натисніть Реєстрація.

  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.