마젠토 2:'crontab' 영역에는 자체 di.xml이 있고, 있어야 합니다.
-
13-12-2019 - |
문제
마젠토2도 되나요? crontab
영역 부하 범위 di.xml
파일?아니면 더 이상 사용되지 않는 건가요?또는 ~해야 한다 사용할 수 있지만 일부로 로드되지는 않습니다. crontab
응용 프로그램은 버그입니까?아니면 근본적으로 뭔가를 오해하고 있습니까?
Magento 2의 "영역" 기능을 사용하면 요청 컨텍스트를 기반으로 추가 구성 정보를 로드할 수 있습니다(약간 손이 많이 가지만 특정 관점에서는 정확함).
예를 들어 Magento는 언제나 다음을로드 di.xml
./vendor/magento/module-tax/etc/di.xml
하지만 다음 항목만 로드됩니다. di.xml
프론트엔드 영역에 있을 때
./vendor/magento/module-tax/etc/frontend/di.xml
이것이 사실인지는 확실하지 않습니다. di.xml
에 대한 파일 crontab
영역.
Magento의 cron 실행기는 HTTP 요청을 처리하는 Magento 시스템 애플리케이션과 별도의 Magento 시스템 애플리케이션입니다.cron 애플리케이션이 시작되면 Magento 시스템 애플리케이션은 매우 최소한의 launch
#File: vendor/magento/framework/App/Cron.php
public function launch()
{
$this->_state->setAreaCode('crontab');
$this->_eventManager->dispatch('default');
$this->_response->setCode(0);
return $this->_response;
}
당신은 호출을 볼 수 있습니다 setAreaCode
어디에 crontab
지역번호가 설정되었습니다.이렇게 하면 구성 트리에 대한 요청이 모듈의 etc/crontab
폴더
app/etc/crontab/*.xml
하지만 -- di.xml
다르다/특별하다.Magento는 Magento 시스템 애플리케이션을 시작하기 전에 객체 관리자에 액세스해야 하기 때문에 객체 관리자는 처음에 모든 객체를 로드합니다. etc/di.xml
통화 전 파일 setAreaCode
.
동안 HTTP 요청, Magento 시스템 애플리케이션(Magento\Framework\App\Http
) 특정 영역을 로드합니다. di.xml
지역번호 설정 후 파일
#File: vendor/magento/framework/App/Http.php
public function launch()
{
$areaCode = $this->_areaList->getCodeByFrontName($this->_request->getFrontName());
$this->_state->setAreaCode($areaCode);
$this->_objectManager->configure($this->_configLoader->load($areaCode));
//...
}
이 호출 이후 configure
cron 애플리케이션에서 누락되었습니다. launch
방법, 그것 것 같다 같은 crontab
아무것도 로드하지 않습니다 etc/crontab/di.xml
파일.그러나 몇 가지가 있습니다. etc/crontab/di.xml
파일이 존재합니다.
$ find . -wholename '*crontab/di.xml'
./vendor/magento/module-captcha/etc/crontab/di.xml
./vendor/magento/module-catalog-rule-configurable/etc/crontab/di.xml
이는 시스템의 올바른 동작이 무엇인지에 대해 약간의 혼란을 야기합니다.올바른 시스템 동작이 무엇인지 알 수 있을 만큼 Magento 2 개발을 면밀히 관찰한 사람이 있습니까?
해결책
핵심 팀의 피드백에 따르면 현재 동작은 다음과 같습니다. ~ 아니다 의도된 동작이며 향후 버전에서는 crontab 응용 프로그램이 crontab 영역의 di.xml
.