Upgrade do Moodle 5.2 interrompido: como recuperamos o site sem perder dados

Upgrade do Moodle 5.2 interrompido: como recuperamos o site sem perder dados

Resposta rápida: Um upgrade do Moodle 5.0 para o 5.2 parou no meio e o site saiu do ar com um erro enganoso. Os dados estavam intactos: o problema era a nova estrutura de pastas do Moodle. Recuperamos com uma cópia limpa testada antes e uma troca de pastas sem apagar nada, com volta atrás garantida.

Caso real de produção, contado sem identificar o cliente. Uma entidade que oferece cursos online, com quase 2 mil usuários cadastrados, decidiu atualizar o Moodle do 5.0 para o 5.2. A atualização parou no meio do caminho e o site inteiro saiu do ar. O suporte da hospedagem tentou, não achou a causa, e a plataforma ficou parada com alunos matriculados esperando.

O final é bom: nenhum usuário, curso, nota ou matrícula foi perdido. Mas o caminho até lá mostra bem por que o salto para o Moodle 5.1 ou mais novo pede preparação.

O que aconteceu

O código do Moodle foi trocado pela versão 5.2 e o banco de dados chegou a ser atualizado. A configuração do servidor e o arquivo config.php, porém, continuaram no formato antigo, de antes do 5.1. Resultado: todas as páginas, inclusive a de login, passaram a mostrar um erro, e ninguém conseguia entrar.

Esse estado é o pior dos dois mundos. O banco já estava no 5.2, então voltar o código antigo não resolvia. E o código novo não rodava, porque o ambiente não estava preparado para ele.

A mensagem de erro enganava

A tela mostrava algo como "Class cache not found". Quem lê isso pensa em cache corrompido, plugin quebrado ou banco danificado, e começa a limpar caches, desativar plugins e mexer onde não precisa. Foi o que tinha sido tentado.

Para achar a causa real, montamos uma cópia do código e do banco num ambiente de teste e reproduzimos o erro com o registro detalhado ligado. Por trás da mensagem genérica estava outra: o Moodle não encontrava um dos seus próprios subsistemas, porque estava procurando os arquivos no lugar errado.

A causa real: a pasta public

A partir do Moodle 5.1, os arquivos acessíveis pela web ficam numa pasta public, e o servidor precisa apontar para ela. Explicamos essa mudança em detalhe em página em branco ou 404 depois de atualizar. Neste caso, o config.php continuava dizendo ao Moodle que tudo estava na raiz, no formato antigo, enquanto o código novo esperava a estrutura nova. Cada página quebrava logo no começo do carregamento.

A conclusão mais importante do diagnóstico: o banco de dados e a pasta de arquivos dos alunos estavam sãos. Usuários, cursos e matrículas estavam todos lá. O que precisava ser refeito era só o código e a forma como o servidor o entregava.

O backup que não baixava inteiro

A primeira ideia de todo mundo é "restaura o backup". Havia dois backups automáticos no painel da hospedagem: um feito logo depois da quebra, que só guardava o problema, e um da madrugada anterior, que servia. Só que o download do backup completo era cortado no meio por um limite do painel e nunca chegava inteiro. O banco de dados sozinho, bem menor, baixava sem problema.

Isso não impediu a recuperação, porque os dados de produção estavam sãos. Mas é um alerta: backup que você nunca tentou baixar e restaurar não é um plano. Veja como fazer backup do Moodle do jeito certo.

Como recuperamos sem apagar nada

Três passos: montar uma cópia limpa do Moodle 5.2 numa subpasta ligada aos dados reais, deixar o cliente testar com o site em manutenção e trocar as pastas, levando a versão quebrada para um arquivo fora da web. Para voltar atrás, basta desfazer a troca.
Nenhum arquivo foi apagado em nenhum momento. Isso garante volta atrás e preserva o que for preciso investigar depois.
  1. Cópia limpa ao ladoInstalamos o pacote oficial do Moodle 5.2, já na estrutura com a pasta public, numa subpasta da própria hospedagem do cliente, ligada ao banco de dados e aos arquivos reais. Os plugins e o tema em uso foram copiados e conferidos.
  2. Site principal em manutençãoEnquanto isso, o endereço principal mostrava uma página de manutenção, para os alunos não verem erro.
  3. Validação pelo clienteA equipe do cliente entrou na cópia, conferiu login, cursos e conteúdos e aprovou a troca.
  4. Troca de pastasA instalação quebrada foi movida inteira para uma pasta de arquivo, fora do alcance da web, e a cópia limpa passou a ocupar o lugar dela. Depois, só dois ajustes: o endereço do site no config.php e a regra de reescrita do servidor.
  5. Conferência no arPágina inicial, login, tema e imagens respondendo normalmente, com caches limpos.

Depois da virada: o que ainda estava errado

Site no ar não é o fim. Na revisão pós-virada apareceram dois problemas que vinham de antes:

  • O cron estava parado desde o dia da quebra. As tarefas agendadas apontavam para uma cópia antiga e incompleta do Moodle, que morria ao iniciar. Sem cron, e-mails, conclusões e limpezas não rodam. Ficou uma única tarefa, a cada minuto, apontando para a instalação certa. Veja cron do Moodle que não roda.
  • Uma tarefa limpava todos os caches a cada minuto. A origem não estava documentada. Ela deixava o Moodle mais lento o tempo todo, porque o cache nunca chegava a funcionar. Foi removida.

Resultado final: o mesmo Moodle de antes, agora na versão 5.2, com todos os usuários, cursos e matrículas, e a instalação antiga guardada fora da web caso fosse preciso consultar algo.

Checklist antes do seu upgrade para o 5.1 ou mais novo

  • Teste numa cópia com o banco de dados real antes de mexer na produção.
  • Prepare o servidor para a pasta public antes de trocar o código. Em hospedagem compartilhada, confira se o painel permite mudar a raiz do domínio.
  • Confira a versão do PHP exigida pela versão de destino. Veja qual versão do PHP o Moodle pede.
  • Tenha um backup que você já baixou e restaurou, com banco de dados e arquivos da mesma data.
  • Não apague a instalação antiga até a nova estar validada.
  • Depois da virada, confira o cron e as tarefas agendadas do servidor.
  • Vindo de uma versão bem antiga? O caminho é outro: upgrade encadeado, versão por versão.

Perguntas frequentes

Por que o Moodle parou depois de atualizar para o 5.1 ou 5.2?

Na maioria dos casos, porque a partir do 5.1 o Moodle exige que o servidor sirva a pasta public. Se o código novo foi instalado e o servidor e o config.php continuaram no formato antigo, o site para de abrir, muitas vezes com uma mensagem que não aponta a causa real.

O erro "Class cache not found" significa que perdi os dados?

Não necessariamente. No caso deste artigo, a mensagem aparecia em todas as páginas, mas o banco de dados e os arquivos estavam intactos. O problema era a estrutura de pastas do código, não os dados.

Dá para simplesmente restaurar o backup de antes do upgrade?

Só se você restaurar o banco de dados e o código juntos, da mesma data. Se o upgrade já alterou o banco, voltar só o código antigo não funciona. E, em muitos painéis, o backup completo não baixa inteiro, então confira isso antes de depender dele.

Quanto tempo o site fica fora do ar numa recuperação assim?

O tempo maior vai no diagnóstico e na montagem da cópia limpa, que podem ser feitos com o site em manutenção. A troca final, quando a cópia já foi testada, leva minutos.

Como evitar que um upgrade derrube o Moodle?

Teste antes numa cópia, confira se o servidor já serve a pasta public, tenha um backup que você consiga baixar e restaurar, mantenha o código antigo até validar o novo e confira o cron depois da virada.

Alejandro Argachá, especialista em Moodle

Escrito por Alejandro Argachá

Conhece o Moodle desde 2011 e, desde 2016, atua na parte técnica: servidor, código e segurança. Mais de 250 projetos entregues, boa parte para outras empresas que vendem Moodle. Resolve na prática problemas como este em plataformas de empresas e instituições brasileiras. Ver casos reais.