Pregunta

¿Magento 2? crontab carga de área con alcance di.xml ¿archivo?¿O esto ya no se usa?O debería se puede utilizar, pero no se carga como parte del crontab ¿La aplicación es un error?¿O es que entiendo algo fundamentalmente mal?

En Magento 2, la función "áreas" le permite cargar información de configuración adicional según el contexto de la solicitud (eso es un poco ondulado, pero preciso desde cierto punto de vista).

Por ejemplo, Magento siempre carga lo siguiente di.xml

./vendor/magento/module-tax/etc/di.xml

pero solo cargará lo siguiente di.xml cuando en el área frontal

./vendor/magento/module-tax/etc/frontend/di.xml

No está claro si esto es cierto para el di.xml archivos para el crontab área.

El corredor cron en Magento es una aplicación del sistema Magento separada de la aplicación del sistema Magento que maneja las solicitudes HTTP.Cuando se inicia la aplicación cron, su aplicación del sistema Magento tiene un mínimo 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;
}

Puedes ver la convocatoria a setAreaCode donde el crontab El código de área está configurado.Esto garantiza que las solicitudes de árboles de configuración se fusionarán en cualquier configuración ubicada en el directorio de un módulo. etc/crontab carpeta

app/etc/crontab/*.xml

Sin embargo -- di.xml es diferente/especial.Debido a que Magento necesita acceso al administrador de objetos antes del inicio de la aplicación del sistema Magento, el administrador de objetos inicialmente carga todos los etc/di.xml archivos antes de la llamada a setAreaCode.

durante un HTTP solicitud, la aplicación del sistema Magento (Magento\Framework\App\Http) carga el área específica di.xml archivos después de configurar el código de área

#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));
    //...
}

Desde este llamado a configure falta en la aplicación cron launch método, es parece como el crontab no carga ninguno etc/crontab/di.xml archivos.Sin embargo, hay algunos etc/crontab/di.xml archivos presentes.

$ find . -wholename '*crontab/di.xml'
./vendor/magento/module-captcha/etc/crontab/di.xml
./vendor/magento/module-catalog-rule-configurable/etc/crontab/di.xml

Esto crea cierta confusión sobre cuál debería ser el comportamiento correcto del sistema.¿Alguien aquí ha seguido el desarrollo de Magento 2 lo suficientemente de cerca como para saber cuál es el comportamiento correcto del sistema?

¿Fue útil?

Solución

Según los comentarios del equipo central, parece que el comportamiento actual es no el comportamiento previsto y, en versiones futuras, la aplicación crontab se cargará en el área de crontab di.xml.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top