Atualizar o Núcleo via Composer
Esta documentação é incompleta. Adicione mais informações.
Teve problemas ao atualizar para Drupal 8.8.0 ou mais recente?
As principais mudanças foram feitas no Drupal 8.8.0 como parte da iniciativa Composer, o que melhorará significativamente os fluxos de trabalho do Composer para gerenciar sites Drupal a longo prazo. No entanto, existem algumas considerações especiais que podem afetar a atualização de versões anteriores.
Primeiros Passos
Para entender como o Composer gerencia as dependências do Drupal, consulte Usando Composer com Drupal. Para decidir se o Composer é uma maneira sensata de atualizar, compare as opções disponíveis.
Para sua conveniência, essas instruções incluem Drush comandos necessários para concluir a atualização: muitas pessoas acham o Drush mais rápido e fácil do que o painel de administrador da web.
Se for um site Drupal existente onde o Composer nunca foi usado anteriormente, certifique-se primeiro de que esteja pronto para Composer.
Atualizar o Núcleo do Drupal 8
Primeiro, verifique se uma atualização do núcleo do Drupal está realmente disponível:
composer update --dry-run "drupal/*"
Isso mostrará qualquer atualização menor ou de patch disponível; use composer desatualizado "drupal/*" se você quiser saber se há atualizações para versões principais. (Consulte Semver 2.0 para uma explicação das versões principal, secundária e de patch.) Se não houver uma linha começando com drupal/core, o Composer não sabe de nenhuma atualização. Anote se há uma linha começando com drupal/core-recommended. Se houver uma atualização, continue com os comandos abaixo.
Instruções de Atualização em Uma Etapa
Supondo que você esteja acostumado a atualizar o Drupal e saiba todas as precauções que deve tomar, a atualização é tão simples quanto:
composer update drupal/core --with-dependencies
drush updatedb
drush cache:rebuild
Substitua drupal/core por core-recommended se você usar core-recommended em seu site. Você pode dizer que seu site usa core-recommended se ele estiver listado no seu arquivo composer.json, ou se ele foi listado no resultado do composer update --dry-run quando você verificou se havia atualizações disponíveis.
Se você iniciou seu site Drupal há algum tempo usando drupal-composer/drupal-project, o comando acima pode não funcionar. Por favor, leia a lista abaixo.
Para atualizar para a versão 8.8.0 ou mais recente
A versão mais recente do drupal-composer/drupal-project é compatível com Drupal 8.8.x. No entanto, se você criou seu site a partir deste projeto há algum tempo (2019 e anteriores), provavelmente precisará fazer algumas alterações únicas na primeira atualização para a versão 8.8.0 ou mais recente. Essas mudanças são detalhadas nas considerações especiais abaixo.
Se você não instalou o Drupal 8 com Composer
Se você não instalou o Drupal 8 com Composer, você deve converter seu site em um projeto gerenciado por Composer para poder atualizar o Drupal usando os comandos acima. Consulte Adicionar Composer a Sites Existentes para um guia passo a passo sobre como adicionar manualmente o Composer a sites Drupal 8 existentes que foram anteriormente instalados sem Composer.
Instruções de Atualização Passo a Passo
Todos os passos para atualizar o núcleo do Drupal 8 com Composer:
1. Sempre faça backup de seus arquivos e banco de dados antes de atualizar.
- drush sql:dump outputará o banco de dados
- Infelizmente, drush archive-dump foi removido do Drush 9, portanto você precisará usar a ferramenta CLI padrão para fazer backup dos diretórios necessários - geralmente excluindo o diretório vendor.
2. Leia as notas de lançamento principais. Alguns módulos ou temas adicionados podem precisar ser atualizados para funcionar com a nova versão menor (por exemplo, 8.3–8.4) do núcleo do Drupal. Os lançamentos de patch (por exemplo, de 8.4.4 para 8.4.5) não devem exigir isso. Para detectar as atualizações de módulo ou tema necessárias, você precisará ler a página do projeto ou as notas de lançamento.
3. Ative o modo de manutenção usando estado: defina system.maintenance_mode 1 e, em seguida, limpe o cache: reconstrua.
4. Se você determinou que alguns módulos ou temas precisam ser atualizados, siga as instruções de atualização de módulos.
5. Atualize o núcleo do Drupal e todas as suas dependências:
- Execute o seguinte comando do Composer:
composer update drupal/core --with-dependencies
- Substitua drupal/core acima por drupal/core-recommended se você estiver usando o padrão core-recomendado.
- Se você iniciou seu site Drupal usando drupal-composer/drupal-project, consulte as considerações especiais abaixo para saber sobre etapas adicionais que você pode precisar executar ao atualizar para a versão 8.8.0 ou mais recente.
6. Em seguida, aplique todas as atualizações de banco de dados necessárias usando drush updatedb e limpe o cache com drush cache:rebuild
7. Se você usar gerenciamento de configuração para implantar sua configuração, certifique-se de exportar a configuração com drush config:export após atualizar o banco de dados, pois algumas atualizações do núcleo podem alterar a estrutura dos arquivos de configuração ou introduzir novos valores para eles. Adicione a opção --diff para ver as alterações reais.
8. Verifique se seu site no Drupal está tudo bem:
- Revise a página de relatório de status para erros.
- Se o módulo de log de banco de dados estiver ativado, execute algumas operações básicas e verifique os logs recentes para erros, avisos, etc.
9. Desative o modo de manutenção usando drush state:set system.maintenance_mode 0 e, em seguida, limpe o cache: drush cache:rebuild.
10. Após desativar o modo de manutenção, verifique o site também como um usuário anônimo.
Em seu ambiente de produção
- Você não precisa repetir o resto do processo acima, pois quando o compositor install for executado, ele lerá os ponteiros de confirmação exatos para todos os pacotes do composer.lock, portanto você terá as mesmas versões de tudo em ambos os ambientes.
- Se você tiver servidores separados de dev/staging e produção, certifique-se de copiar/confirmar os arquivos composer.json e composer.lock para produção e sempre executar composer install --no-dev em produção, em vez de atualizar. O sinalizador --no-dev impedirá a instalação de qualquer pacote listado em 'require-dev', geralmente módulos de depuração e bibliotecas para testes unitários/comportamentais.
Considerações Especiais para Atualizar para Drupal 8.8.0 e Mais Recente
O parceiro oficial do programa beta do Drupal PreviousNext publicou uma postagem útil no blog sobre as etapas que realizaram ao atualizar do Drupal 8.7 para a versão beta do Drupal 8.8.0, que pode ajudar qualquer outro proprietário de site que tenha problemas com esta atualização.
A razão principal dos problemas ao atualizar versões anteriores do Drupal para Drupal 8.8.0 com Composer é a mudança do uso do padrão do Composer fornecido pela comunidade para o novo padrão oficial drupal/recommended-project. Os seguintes passos de solução de problemas devem corrigir sua instalação para que você possa usar as instruções de atualização padrão conforme descrito acima.
Tente Remover o Diretório /vendor
A remoção do seu diretório de fornecedor às vezes pode eliminar conflitos ao executar uma atualização do Composer. Para fazer isso:
cd your_install_dir
rm -rf vendor
Em seguida, você pode prosseguir com as etapas de solução de problemas e/ou continuar com o comando de atualização do Composer.
Migração de webflo/drupal-core-strict para drupal/core-recommended
Antes da versão 8.8.0, muitos sites usaram o metapacote webflo/drupal-core-strict para vincular dependências a versões exatas usadas/testadas com o núcleo do Drupal (principalmente pacotes Symfony). A partir da versão 8.8.0, o núcleo do Drupal fornece o pacote drupal/core-recommended para fornecer essa funcionalidade. No entanto, a transição do método antigo para o novo não acontece automaticamente ao atualizar para o núcleo 8.8.0, e o pacote webflo/drupal-core-strict não funciona com 8.8.0.
A maneira mais fácil de realizar essa migração e evitar conflitos é remover completamente o arquivo composer.lock como parte da atualização. No entanto, isso significará que outras dependências (como módulos do Drupal adicionados) também podem ser atualizadas. A execução desses passos garantirá que você atualize apenas o que pretende:
- composer update # Atualize quaisquer dependências como uma etapa separada.
- git add composer.lock; git commit # Salve as atualizações como um commit separado.
- composer remove webflo/drupal-core-strict --no-update
- composer remove drupal/core --no-update
- composer require 'composer/installers:^1.7' --no-update
- rm composer.lock
- rm -rf vendor # Também ajuda a evitar conflitos.
- composer require drupal/core-recommended:^8.8 --update-with-dependencies
- git add composer.json composer.lock; git commit -m "Update Drupal to 8.8.0 and use drupal/core-recommended instead of webflo/drupal-core-strict"
Migração de webflo/drupal-core-require-dev para drupal/core-dev
Se você criou seu site há algum tempo, ele pode usar o metapacote webflo/drupal-core-require-dev para incluir as dependências de desenvolvimento do Drupal para executar testes unitários e funcionais. Se você não usar dependências de desenvolvimento do Drupal para desenvolvimento, pode simplesmente remover webflo/drupal-core-require-dev. Caso contrário, você deve começar a usar o projeto drupal/core-dev.
Primeiro, o pacote antigo de ferramentas de desenvolvedor deve ser removido:
composer remove --dev webflo/drupal-core-require-dev
Se você não precisar das ferramentas de desenvolvedor, pode parar aqui. Se quiser instalá-las novamente usando o método oficial, execute:
composer require --dev drupal/core-dev
Atualizar Patches
Se você estiver aplicando patches usando cweagans/composer-patches, esses patches talvez precisem ser recriados. Depois que o patch for recriado, você precisará atualizar o patch na seção extra/patches do seu composer.json.
Atualizar Dependências Suaves em Conflito
Em alguns casos, uma dependência suave pode estar instalada com uma versão incompatível com a versão mais recente do Drupal. A solução, nesse caso, é composer require versões específicas desses módulos para atualizar o núcleo e, em seguida, remover as dependências.
O exemplo a seguir é do excelente post da PreviousNext:
Primeiro, exija o novo núcleo do Drupal e dependências:
composer require --update-with-dependencies \
drupal/core:^8.8.0 \
symfony/finder:^3.4 \
symfony/filesystem:^3.4
Em segundo lugar, exija o novo pacote core-dev e dependências:
composer require --dev --update-with-dependencies \
drupal/core-dev:^8.8.0 \
symfony/debug:^3.4
Finalmente, remova as dependências temporariamente necessárias:
composer remove -n \
symfony/finder \
symfony/filesystem \
composer remove -n --dev symfony/debug
Atualizar Configuração de Banco de Dados e Esquema
Após atualizar a base de código, você pode precisar atualizar a configuração e o esquema do banco de dados:
drush updb
drush cr
drush config-export
Atualizar Settings.php
No Drupal 8.8.0, o diretório de sincronização é definido em $settings em vez de $config_directories, portanto o arquivo Settings.php deve ser atualizado.
Simplesmente altere de:
$config_directories['sync'] = 'foo/bar';
para
$settings['config_sync_directory'] = 'foo/bar';
Problemas Conhecidos e Soluções Alternativas
Se você executar o comando composer update acima, mas drupal/core não for atualizado, pode haver outra dependência bloqueando a atualização do Drupal. Você pode verificar o bloqueio de dependências usando o comando composer prohibits. Por exemplo, se você estiver tentando atualizar de 8.4.5 para 8.5.0, você pode executar composer prohibits drupal/core:8.5.0 e ele deve fornecer uma lista de dependências que bloqueiam a atualização. Atualize essas dependências junto com drupal/core, e deve funcionar (por exemplo, composer update drupal/core "symfony/*" --with-dependencies).
Os problemas de atualização do Composer costumam estar relacionados a padrões de Composer desatualizado ou configurações incorretas no composer.json. Certifique-se de estar usando um padrão de Composer como o sugerido no Capítulo 3.5 do Guia do Usuário do Drupal 8 "Usando o Composer para Baixar e Atualizar Arquivos". Consulte Adicionar Composer a Sites Existentes para um guia passo a passo sobre como adicionar manualmente o Composer a sites Drupal 8 existentes que foram anteriormente instalados sem Composer.
A partir de janeiro de 2020, o padrão do Composer drupal-composer/drupal-project para projetos Drupal não é mais o padrão recomendado para Drupal 8.8 e superior. Até que o Capítulo 3.5 do Guia do Usuário do Drupal 8 seja atualizado, consulte o Guia Comunitário para Iniciar um Site Usando Modelos de Projeto do Composer.
Alguns outros problemas relevantes e posts de blog com mais ajuda:
- Atualizando para Drupal 8.4.0 e Drush 9 com Composer - um post no blog de Benji Fisher (@benjifisher) na Isovera sobre atualizações problemáticas de 8.3 para 8.4.
- Atualizando para o núcleo do Drupal 8.4, guia passo a passo - um post no blog do PreviousNext sobre atualizações problemáticas de 8.3 para 8.4.
- Atualizando para Drupal 8.5 com Composer - um post no blog de Eirik Morland (eiriksm) abordando alguns problemas de 8.4 para 8.5.
- O Composer não conseguiu atualizar de 8.4.4 para 8.5.0-alpha1 - muitas ideias sobre como resolver o problema de atualização do Composer.
- Tendo problemas ao atualizar seu site Drupal 8? Então este post do blog é para você - um post do blog para o novo plug-in GoComposer que automatiza o processo de atualização e converte seu site para o padrão recomendado.
Em caso de erros e avisos que surjam durante o processo de atualização, é recomendável lê-los cuidadosamente e procurar nas filas de problemas possíveis soluções antes de prosseguir. Em caso de erros fatais, sempre é recomendável interromper qualquer atualização adicional e recomeçar do zero usando o backup recomendado anteriormente.