Magento 2のBulk Actionsが起動しない場合の対処法

Magento 2.3.x 以下のバージョンでは、バルクアクションが起動しないという問題がよく発生していました。このバグはMagentoの開発ブランチで修正されていますが、その修正をMagentoストアに実装するには少々の手作業が必要です。

この記事では、このバグを掘り下げて、この問題に対処するための解決策をご提案します。

関連トピック:Magento 2 UIフォームの作成

1.再現の手順

これは実際には簡単に再現できるバグです。

1.1.

Magento 2 の管理画面で、「カタログ(Catalog)」 > 「商品(Products)」を開きます。

1.2.

「すべての製品(All Products)」を選択し、「アクション」で「属性の更新(Update attributes)」を選択します。

1.3.

商品の属性を更新します。ここでは、商品説明を更新する例を紹介します。

1.4.

「保存」をクリックすると、複数の製品を選択したにもかかわらず、0件のアイテムがアップデートの予定になっていることがわかります。

また、「Bulk Actions Log」(「System」→「Action Logs」→「Bulk Actions」)を確認すると、以前に適用したバルクアクションのジョブが開始されていないことがわかります。

2.解決方法

このバグを回避するにはいくつかの方法があります。ここでは、このバグが解消された場合に試すことのできるいくつかの方法を紹介します。

2.1.Magento 2.4.x 以上の場合

Magento 2.4.x 以上の場合、Magento の開発ブランチに修正プログラムが用意されています。

<Magento_dir>vendor/magento/module-asynchronous-operations/etc/

このフォルダの中で、db_schema.xmlを編集してください(最初にファイルのバックアップを取ることを忘れないでください)。このファイルの37行目を見てください。

<column xsi:type="int" name="operation_key" padding="10" unsigned="true" nullable="false"

そして、nullable=”false “をnullable=”true “に変更します。その後、以下を実行してください。

php bin/magento s:up

これにより、新しいバルクアクションジョブの問題が解決されるはずです(以前にスタックしたバルクアクションジョブはまだスタックしたままです)。以前のcronアクションジョブのスタックを解除するには、手動で次のコマンドを実行してcronジョブを実行してください。

php bin/magento cron:run

2.2.Magento 2.3.x以下の場合

以前のMagentoのバージョン(Magento 2.3.x以下)では、異なる方法で物事を進めたいと思うでしょうが、その方法はいくつかあります。

2.2.1.手動でクーロンジョブを実行する

この問題に対する最も一般的な解決策は、cron ジョブを手動で実行することです。

php bin/magento cron:run

または、cronが正しく実行されているか確認してください。

crontab -u <Magento file system owner name> -l

crontabが設定されていない場合は、以下のメッセージが表示されます。

no crontab for magento_user

crontabは、以下のことを教えてくれます。

  • 使用している PHP バイナリ (複数の場合もあります)
  • どの Magento cron スクリプトを実行しているか (特にスクリプトのパス)
  • cron のログがどこにあるか

cron ジョブを実行した後、以前に実行したアクションジョブが正常に終了したことがわかります。

2.2.2.env.phpのcron_consumers_runnerに変更を加えること

上記の方法でうまくいかない場合は、env.phpファイルを編集してみてください。このファイルで、cron_consumers_runnerを探し、その内容を以下のコードで置き換えてください。

'cron_consumers_runner' => [
     'cron_run' => true,
     'max_messages' => 2000,
     'consumers' => [
         'product_action_attribute.update',
         'product_action_attribute.website.update',
         'exportProcessor',
         'codegeneratorProcessor'
     ]
 ]

もし、ファイルの中にcron_consumers_runner関数が見当たらない場合は、env.phpの一番下に以下のように挿入すればOKです。

3.結論

この記事が、この問題を解決するために必要な修正方法をお届けできることを願っています。もし、上記の方法で解決できない場合は、下記のコメント欄にご連絡ください。

デモを申し込む

弊社の専門家は最適なソリューションをサポートさせて頂きます。

►►►サービスについて