Pergunta

O Magento 2 crontab área carregar um escopo di.xml arquivo?Ou isso não é mais usado?Ou deve ele pode ser usado, mas não está sendo carregado como parte do crontab aplicativo é um bug?Ou estou fundamentalmente entendendo mal alguma coisa?

No Magento 2, o recurso "áreas" permite carregar informações extras de configuração com base no contexto da solicitação (isso é um pouco ondulado, mas preciso de um determinado ponto de vista).

Por exemplo, Magento irá sempre carregue o seguinte di.xml

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

mas só carregará o seguinte di.xml quando na área de frontend

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

Não está claro se isso é verdade para o di.xml arquivos para o crontab área.

O cron runner no Magento é um aplicativo de sistema Magento separado do aplicativo de sistema Magento que lida com solicitações HTTP.Quando o aplicativo cron é iniciado, seu aplicativo de sistema Magento tem um 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;
}

Você pode ver a chamada para setAreaCode onde o crontab o código de área está definido.Isso garante que as solicitações de árvores de configuração serão mescladas em qualquer configuração localizada no módulo etc/crontab pasta

app/etc/crontab/*.xml

No entanto -- di.xml é diferente/especial.Como o Magento precisa de acesso ao gerenciador de objetos antes do lançamento do aplicativo do sistema Magento, o gerenciador de objetos inicialmente carrega todos os etc/di.xml arquivos antes da chamada para setAreaCode.

Durante um HTTP solicitação, o aplicativo do sistema Magento (Magento\Framework\App\Http) carrega a área específica di.xml arquivos depois de definir o 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 esta chamada para configure está faltando no aplicativo cron launch método, é parece como o crontab não carrega nenhum etc/crontab/di.xml arquivos.No entanto, existem alguns etc/crontab/di.xml arquivos presentes.

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

Isso cria alguma confusão sobre qual deveria ser o comportamento correto do sistema.Alguém aqui acompanhou o desenvolvimento do Magento 2 de perto o suficiente para saber qual é o comportamento correto do sistema?

Foi útil?

Solução

Com base no feedback da equipe principal, parece que o comportamento atual é não o comportamento pretendido e, em versões futuras, o aplicativo crontab será carregado em uma área crontab di.xml.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a magento.stackexchange
scroll top