관심있는 사람이라면 누구나이 문제에 대해 밝힐 수 있다고 생각합니다. var / .regenerate 플래그가 설정되어 있고 둘 이상의 프로세스 / 요청이 생성 된 파일을 정리하려고 할 때 \ Magento \ Framework \ Code \ GeneratedFiles :: cleanGeneratedFiles에서 동시성 (경쟁 조건) 문제인 것 같습니다 .
cron을 사용하도록 설정하고 use_separate_process 구성을 사용하는 많은 cron 그룹이 발생할 가능성이 높습니다. 둘 이상의 프로세스가 동일하게 정리하려고하면 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
다음 캐시는 automaticallyu 비활성화됩니다