モジュールのアンインストール


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コードベースからコードを削除しています:

この後、ハングします。

アンインストールプロセスを完了する、または少なくともデバッグする方法はありますか?


私も同じ問題に直面しています。これに対する解決策は何ですか。あなたはどんな考え持っていますか
ヴィーニャ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のようなcomposerを呼び出さなければなりません、そして明らかに設定はそれに対応していません...
iphigenie

0

私たちが実行したときのbin / Magentoのモジュール:アンインストールMODULE_NAMEを、それは、CLIに示されていないバックプロセスでも作曲updateコマンドを実行します。

composerの更新を実行する場合、magentoマーケットプレイスアカウントのユーザー名とパスワードが必要です。作成していない場合:

認証キーを作成するには:

  1. Magento Marketplaceにログインします。アカウントをお持ちでない場合は、[登録]をクリックしてください。

  2. ページの右上にあるアカウント名をクリックして、[マイプロフィール]を選択します。

  3. [マーケットプレイス]タブの[アクセスキー]をクリックします。

ここに画像の説明を入力してください

このコマンドをmagentoルートディレクトリから実行ln -s ~/.composer/auth.json var/composer_home/ すると、作曲者auth.jsonのシンボリックリンクが作成されます

module:uninstallを実行すると、magento varフォルダーまたはmagentoルートディレクトリのauth.jsonがチェックされます。

それは私のために働きます。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.