卸载模块


10

我正在尝试使用以下命令使用CLI卸载通过composer安装的模块(我自己的模块):

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

运行问题中列出的命令
Marius

我只使用它,但是卡在“从Magento代码库中删除代码:”中。之后挂起
Vigna S

Answers:


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这样调用composer,显然配置不适合它...
iphigenie

0

当我们运行bin / magento模块时:卸载Module_Name,然后它也在cli中未显示的后台进程中运行composer update命令。

当我们运行作曲家更新时,它要求您的magento市场帐户用户名和密码。如果还没有,则创建:

要创建认证密钥:

  1. 登录到Magento市场。如果您没有帐户,请单击注册。

  2. 点击页面右上角的帐户名,然后选择我的个人资料。

  3. 单击“市场”选项卡中的“访问密钥”。

在此处输入图片说明

从您的magento根目录运行此命令,ln -s ~/.composer/auth.json var/composer_home/ 它将创建作曲家auth.json的符号链接

当我们运行模块:卸载时,它会检查magento var文件夹或magento根目录中的auth.json。

它对我有用。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.