Problemas quando rodar static content deploy com EFS

Submitted by Eric on qua, 04/24/2019 - 17:44
Imagem
magento 2 tema

Este artigo é sobre o deploy estático de conteúdo (static content deploy) no AWS EFS, mas também pode ser para NFS ou qualquer tipo de disco via rede ou que possa ser lento.
E este artigo é mais um artigo sobre como o Magento 2 pode ser irritante e como ele não foi feito para rodar de forma escalável.

Bom, estamos vendo vários errors quendo rodando o static content deploy com a opção --jobs:

magento setup:static-content:deploy --jobs 5

A opção --jobs foi feita para que vários temas sejam processados em paralelo. Se você colocar 5 jobs, irá processar 5 temas em paralelo.
No momento cada loja tem somente um tema sendo usado, mas eles dependem no tema base personalizado e também no tema Magento Blank. Quando você roda o comando sem a opção --jobs o Magento vai processar o tema blank, depois processa o tema base personalizado e finalmente o seu tema personalizado.

Mas se você tiver vários temas ou até somente um no EFS, a rede pode ser um bottleneck, assim como o EFS que é lento já que é tudo feito via conexão NFS, então não será tão rápido como fazer o deploy em um SSD local e é justamente ao adicionar a opção --jobs ajuda no deploy do conteúdo estático. Mas se você tiver vários arquivos para cada tema pode demorar vários minutos e você receberá este erro:

In Queue.php line 366:
                                                           
  Error while waiting for package deployed: 42; Status: 0  
                                                           

setup:static-content:deploy [-f|--force] [-s|--strategy [STRATEGY]] [-a|--area [AREA]] [--exclude-area [EXCLUDE-AREA]] [-t|--theme [THEME]] [--exclude-theme [EXCLUDE-THEME]] [-l|--language [LANGUAGE]] [--exclude-language [EXCLUDE-LANGUAGE]] [-j|--jobs [JOBS]] [--symlink-locale] [--content-version CONTENT-VERSION] [--refresh-content-version-only] [--no-javascript] [--no-css] [--no-less] [--no-images] [--no-fonts] [--no-html] [--no-misc] [--no-html-minify] [--] [<languages>...]

Até existe um issue aberto no repositório do Magento 2 e eu adicionei um comentário lá: https://github.com/magento/magento2/issues/21852

O problema pode ser causado por este código: https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Deploy/Process/Queue.php#L391
E a função responsável pelo timeout: https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Deploy/Process/Queue.php#L372
E tudo isso aponta para a const DEFAULT_MAX_EXEC_TIME = 400;
https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Deploy/Process/Queue.php#L32

Então se o static content deploy roda por mais de 400 segundos, ele irá falhar. Mas o Magento consertou a ferramenta ECE deles adicionando uma opção para aumentar o timeout: https://github.com/magento/ece-tools/pull/418
Mas no momento o problema não foi corrigido no Magento Open Source ou Commerce Edition.

Então o que você pode fazer: Bom, no momento estamos colocando a informação do tema para cada loja em um microservice e quando há um deploy de código nós pegamos a informação do microservice e fazemos o deploy somente do tema associado à loja. Então por exemplo o tema MageBR/mytheme associado à sua loja poderia rodar assim:

magento setup:static-content:deploy --theme MageBR/mytheme

Desta forma irá acelerar o deploy do conteúdo estático e não aparecer erros.

Deploy using quick strategy
frontend/Magento/blank/en_US            2456/2456           ============================ 100% %  1 min               
frontend/MageBR/base/en_US                 2765/2765           ============================ 100% %  2 mins              
frontend/MageBR/mytheme/en_US           2765/2765           ============================ 100% %  2 mins

Execution time: 483.77401208878

Mas seria muito melhor se puder rodar o comando com a opção --jobs para acelerar ainda mais o processo. Você pode fazer um teste adicionando a opção --jobs com a opção --theme e se não demorar muito o deploy, não haverá problema, mas seria uma boa ótimo ter uma opção para aumentar o timeout diretamente na linha de comand.

Espero que tenha gostado do artigo, deixe seu comentário e não se esqueça de compartilhar!

 

 


FacebookTwitterGoogle+Share

Comentar

HTML restrito

  • Tags HTML permitidas: <a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • Quebras de linhas e parágrafos são gerados automaticamente.
  • Web page addresses and email addresses turn into links automatically.
CAPTCHA
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.
Categoria