문제

마젠토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.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 magento.stackexchange
scroll top