Módulos grátis

Bug do core do Magento 2? Aplique o patch oficial da Adobe

Não é patch de segurança e não é upgrade. É um catálogo de correções pontuais que a Adobe mantém por versão, e que você aplica com dois comandos.

Por Roger Takemiya · Publicado em · 5 min de leitura

Você isolou um bug, achou o ticket, e a resposta oficial é aquela: corrigido na 2.4.8-p3. Sua loja está na 2.4.7-p5 e subir de versão é um mês de projeto, com regressão de checkout e de todo módulo brasileiro instalado.

Existe um caminho no meio que muita gente não conhece: a Adobe publica essas correções em pacote separado, gratuito, com mais de mil patches catalogados por versão. Você pega uma e continua onde está.

Instala e vê o que serve para a sua versão

É um pacote Composer normal:

composer require magento/quality-patches

Ele vem do repo.magento.com, o mesmo repositório que sua loja já usa para baixar o Magento — então as credenciais que estão no auth.json bastam. Junto vem o magento/magento-cloud-patches, que é quem entrega o executável.

./vendor/bin/magento-patches status

A saída é uma tabela com Id, Title, Category, Origin, Status e Details. O Status diz Applied, Not applied ou N/A quando o próprio comando não consegue decidir por causa de conflito.

Se a sua versão tiver mais de 50 patches disponíveis — e vai ter — o comando fica interativo: pergunta o provedor e depois a categoria antes de imprimir. Categorias reais são coisas como Order/Checkout, Catalog/Product, Performance, Inventory, Emails. Se você quer só o despejo cru para grep ou script:

./vendor/bin/magento-patches status --format json

Só para dar tamanho ao que tem lá dentro: AC-14985 conserta o envio de e-mail por SMTP com TLS na 2.4.8; ACSD-51819 resolve dois pedidos serem criados com o mesmo quote id. É esse tipo de coisa — bug de operação do dia a dia.

Aplicar, conferir e voltar atrás

Aplicar é passar o id. Aceita mais de um:

./vendor/bin/magento-patches apply ACSD-51819

Depois disso, o de sempre para código que mudou dentro de vendor/:

php bin/magento setup:upgrade
php bin/magento setup:di:compile
php bin/magento cache:flush

Voltar atrás é o mesmo verbo ao contrário:

./vendor/bin/magento-patches revert ACSD-51819
./vendor/bin/magento-patches revert --all

Esse revert --all é o botão de pânico e funciona. É por isso que eu prefiro esse caminho a um patch caseiro colado com cweagans/composer-patches: aqui a reversão é prevista.

Tem também o verify, que confere se os patches que você espera estão mesmo aplicados. Bom para pôr no fim do pipeline e descobrir o problema na hora do deploy, não na sexta à noite.

Testa em homologação. Sério. O README do repositório é explícito: Make sure to test all patches in a pre-production environment. Patch de qualidade não passa pelo mesmo ciclo de teste de uma release.

O que isso muda no seu deploy

Duas coisas importantes, e as duas mordem quem esquece.

O patch mora dentro de vendor/. Ou seja, todo composer install apaga o que você aplicou. O apply tem que entrar no script de deploy, depois do composer install e antes do setup:di:compile. Se o seu deploy é build separado, o lugar é a máquina de build.

Cada patch é construído para uma faixa de versão. No catálogo isso aparece como >=2.4.7 <2.4.8, por exemplo. Quando você finalmente for subir de versão, reverta tudo antes: patch feito para a 2.4.7 aplicado sobre a 2.4.8 ou não entra, ou entra torto. E na versão nova ele provavelmente nem é mais necessário, porque a correção virou parte do core.

Por fim, não confunda os dois mundos. Quality patch é correção funcional e é opcional. Patch de segurança da Adobe, aquele que vem com boletim APSB, é outro assunto e outro pacote — esse não é opcional, e eu trato dele à parte no guia de segurança.

Perguntas rápidas

Isso serve para Magento Open Source ou só para Adobe Commerce?

Serve para os dois. O catálogo tem patches marcados para magento2-base, que é o Open Source, e outros para magento2-ee-base, que é o Commerce. O comando só mostra o que existe para a sua instalação.

Preciso pagar alguma coisa para usar?

Não. O pacote é gratuito e vem do mesmo repositório da Adobe que você já usa para instalar o Magento, com as chaves que estão no auth.json.

E se o patch não aplicar e der conflito?

Costuma ser porque um módulo de terceiro ou um patch caseiro já mexeu no mesmo arquivo. Nesse caso o status marca N/A. Vale abrir o arquivo .patch dentro do vendor/magento/quality-patches e ver que linhas ele espera encontrar.

Pra conferir na fonte

  1. Quality Patches Tool: usage — Adobe Experience League
  2. magento/quality-patches (repositório e README) — GitHub — magento/quality-patches
  3. Quality Patches Tool (busca de patches) — Adobe Experience League
  4. magento/magento-cloud-patches (o executável magento-patches) — GitHub — magento/magento-cloud-patches

patch composer cli

Precisa de um orçamento? Ficarei feliz em ajudar. Clique Aqui