興味のある方は、この問題について少しお話しできればと思います。\ Magento \ Framework \ Code \ GeneratedFiles :: cleanGeneratedFilesでは、var / .regenerateフラグが設定されており、複数のプロセス/リクエストが生成されたファイルをクリーンアップしようとした場合、同時実行性(競合状態)の問題のようです。
これは、cronを有効にし、多くのcronグループがuse_separate_process設定を使用している場合に発生する可能性が高くなります。複数のプロセスが同じものをクリーンアップしようとすると、FileIteratorは次のような異なるメッセージで失敗します。FilesystemIterator::__construct(/Users/adrianmartinez/Sites/r2-project-develop-b2b/environments/2-2-develop-b2b/magento/generated/code): failed to open dir: No such file or directory.
$this->write->delete(self::REGENERATE_FLAG);
フラグの存在チェックの直後にへの呼び出しを上に移動すると、問題が解決します。最初に到着したプロセスは、それ自体がファイルのクリーニングの責任があるとマークしているためです。
問題を再現する方法についてのデモビデオをここに残します:https :
//youtu.be/9-X1cIIY7y8
そして、それに使用されたスクリプト:
#!/bin/bash
# \Magento\Framework\Code\GeneratedFiles has a concurrency problem
# Create regenerate flag and launch parallel commands that try to regenerate at the same time
# This is a real case, cron:run launches stand alone processes in parallel
# Created by magento composer installer upon code install or module enable/disable
touch var/.regenerate
# Launch parallel commands
# Error differs each execution, sometimes it even works
bin/magento cron:run --group=ddg_automation --bootstrap=standaloneProcessStarted=1 2>&1 &
bin/magento cron:run --group=index --bootstrap=standaloneProcessStarted=1 2>&1 &
wait
echo "All done"
setup:upgrade
キャッシュが自動的に無効になります