Magento2:A área `crontab` tem e deve ter seu próprio di.xml
-
13-12-2019 - |
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?
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
.