The Joomla! Community Magazine™

Migração complexa de Joomla! 1.5 em seis minutos

Written by | Thursday, 01 May 2014 00:00 | Published in 2014 May
A versão 1.5 do Joomla já não é mais suportada pelo projeto há algum tempo. Você ainda pode continuar usando essa versão, mas atualizações de segurança não serão mais disponibilizados. Além disso, tanto as versões 2 e 3 tem novos recursos e melhorias que deixam a 1.5 com um ar de ultrapassada, e é possível notar como o Joomla evolui nos últimos tempos.

É uma boa idéia migrar seus sites Joomla 1.5 para a versão suportada pelo projeto no momento. Ainda existem muitos sites rodando nessa versão por diversas razões, como falta de tempo, falta de verba, falta de motivação, desinteresse etc.

Às vezes, isso acontece por conta da complexidade da migração.

Recentemente um site com Joomla 1.5 de um cliente necessitou passar por uma migração. Um grande desafio e aprendizado que gostaria de compartilhar com vocês para que passem por esse processo de forma mais suave, quando for necessário.

Site Joomla da Exact Netherlands

Exact é uma empresa líder mundial fornecedora de software para negócios e proporciona soluções de ERP completas para pequenas e médias empresas. Lá são desenvolvidas soluções na nuvem e específicas de certas indústrias para fabricação, atacado e distribuição, serviços profissionais e contabilidade. A empresa usa Joomla para vários de seus sites há alguns anos. O site da Exact Netherlands rodava em Joomla 1.5 e precisava ser migrado.

Esse é um dos maiores sites dos Países Baixos e ferramenta principal de vendas, comunicação e marketing da empresa. Ter um site estável e sempre disponível para seus visitantes é de grande importância para a Exact Netherlands.

Muitos profissionais de conteúdo trabalham diariamente no site, que está sempre em movimento. Ele utiliza várias extensões customizadas e contém um grande número de itens de menu, artigos e módulos.

Requisitos principais para a migração

Alguns requisitos de extrema importância foram levados em consideração para a migração:

  • O tempo máximo que o site deveria ficar fora do ar era duas horas, a noite;
  • O resultado final deveria manter o mesmo layout, funcionalidades, URLs, menus, artigos etc, rodando em Joomla 2.5;
  • Em resumo, o visitante não deveria perceber as diferenças entre as versões do site.

Mas, como conseguir isso? Uma migração Joomla "normal" -  criar uma cópia, migrá-la, corrigir as configurações e colocá-la no ar - não era uma opção para a Exact. Isso levaria muito tempo e a cópia do site estaria desatualizada em algumas horas.

Uma migração Joomla normal

Para se ter uma boa noção da migração, o projeto começou de forma normal. Para migrar os dados do core do Joomla, optou-se por usar a extensão SP Upgrade. Esta extensão comercial (paga) foi instalada em um Joomla 2.5 sem dados de exemplo. Todos os 1.500 artigos, 650 itens de menu e 950 módulos foram movidos com ela.

O site usa várias extensões de terceiros, felizmente, compatívies com Joomla 2.5. Todas as extensões foram migradas copiando as tabelas do banco de dados da 1.5 para o banco da 2.5, algo que pode ser feito usando a SP Upgrade também, e depois as extensões foram instaladas. Elas detectam estruturas no banco desatualizadas e as atualizam, caso necessário. O template já tinha uma versão 2.5 disponível.

Novos recursos, novas configurações

Até o momento fizemos os passos de uma migração normal. Os dados foram transferidos, mas estava claro que ele ainda não estava como deveria ficar. Normalmente, isso é causado por configurações diferentes ou novas, comparadas com as versões anteriores do Joomla. Um exemplo simples é o módulo de menu. Na versão 1.5 ele pode ser configurado para exibir niveis 0 a 3, porém, para ter o mesmo resultado na 2.5, a configuração deve ser feita entre 1 e 4. O nível 0 não existe mais na 2.5.

Normalmente verifica-se essas configurações e os ajustes são feitos quando necessário. Dependendo do tamanho do site, isso pode levar horas ou dias. Assim que tudo estiver conferido e ajustado, o site está pronto para ser publicado. Essa parte da migração era a mais crítica para o projeto Exact, pois levaria muito tempo para fazer os ajustes e tudo ficava um pouco imprevisível.

Um script de migração customizado

Ainda assim deveria estar claro quais dados e ajustes de configurações eram necessários para assegurar que ambas versões estivessem idênticas. Ao invés de fazer as mudanças pela interface do Joomla, elas foram feitas diretamente no banco de dados, ao mesmo tempo que se acompanhava o que acontecia.

Todos essas mudanças foram incorporadas em um script customizado que consiste de uma série de queries SQL. Juntar todos esses ajustes necessários levaria tempo, mas assim que o script estivesse completo, as queries SQL seriam executadas rapidamente.

Diferenças nos níveis de menu

Vamos criar um script de simples de migração e usar o ajuste da configuração de nível de módulo como exemplo.

Crie um arquivo chamado migrate.php e o coloque na raiz de sua instalação. Insira o código abaixo no arquivo. Ele modifica os módulos com ID 233, 294 e 357. Os parâmetros são modificados em loop e depois salvos no banco de dados. O nível inicial do módulo com ID 233 muda de de 2 para 3. Como exemplo adicional, o tipo de menu é adicionado ao módulo de ID 294 e o texto Você está aqui é configurado para Ocultar para o módulo de breadcrumbs com ID 357.

define('_JEXEC', 1);

// Connect with Joomla
define('JPATH_BASE', __DIR__);
require_once JPATH_BASE . '/includes/defines.php';
require_once JPATH_BASE . '/includes/framework.php';

// Database connection
$db = JFactory::getDBO();

/**
 * Module changes
 */
 
// Get the modules that need changes
$query = $db->getQuery(true);
$query->select('*')
	->from('#__modules')
	->where('id IN (233,294,357)');
$db->setQuery($query);
$modules = $db->loadObjectList('id');

foreach($modules as $module)
{
	$module->params = json_decode($module->params);
}

// Change startLevel
if ($modules[233]->params->startLevel == 2)
{
	$modules[233]->params->startLevel = 3;
	echo('Module [233]: startLevel: 3 
'); } // Set menutype if (empty($modules[294]->params->menutype)) { $modules[294]->params->menutype = 'mainmenu'; echo('Module [294]: menutype: mainmenu
'); } // Hide breadcrumb "You are here" if (!$modules[357]->params->showHere) { $modules[357]->params->showHere = 0; echo('Module [357]: showHere: 0
'); } // Save new module params foreach($modules as $id=>$module) { $params = json_encode($module->params); $mod = new JObject(); $mod->id = $id; $mod->params = $params; $result = $db->updateObject('#__modules', $mod, 'id'); }

Script disponível como Gist: https://gist.github.com/sanderpotjer/9311435

Mudanças em extensões específicas

Ajustes similares podem ser feitos dessa forma no banco de dados. Para a extensão ZOO, todos os ítens precisavam de ajustes para a configuração de acesso. Por conta da migração os iténs ficaram invisíveis, o que obviamente não é o que se quer. Pode-se adicionar o código a seguir ao script de migração para assegurar que o acesso aos itens do ZOO sejam corrigidos no banco.

/**
 * Component changes
 */
 
// ZOO access fixes
$query 		= $db->getQuery(true);
$fields 	= array('access=1');
$conditions = array('access=0');
$query->update($db->quoteName('#__zoo_item'))->set($fields)->where($conditions);
$db->setQuery($query);

$result = $db->query();
echo('ZOO: Access set to 1 
');

Script disponível como Gist: https://gist.github.com/sanderpotjer/9311435

Redução drástica do tempo de migração

O script usado para a Exact foi mais completo que esse, porém já se tem uma idéia sobre o poder de um script de migração customizado: todas as ações necessárias no back-end são realizadas em segundos, ao invés de horas ou dias. Isso reduz drasticamente o tempo exigido para a migração, um ítem importante no projeto da Exact.

Uma vantagem adicional do script é que se pode testar e melhorar a migração diversas vezes até alcançar o resultado desejado.

Uma boa base Joomla 2.5

Em conjunto com as mudanças no banco de dados, também é necessário mexer nos arquivos do servidor, como os arquivos de override do template. Isso é feito durante os testes e resulta em uma instalação customizada que inclui tudo que é necessário para que o resultado da migração funcione corretamente.

Para testar com detalhes o script de migração, uma cópia nova do Joomla 2.5 foi usada. Dessa forma a migração fica melhor preparada e surpresas durante o processo final são eliminadas.

O Grande Dia da Migração

Após semanas de preparativos, estávamos prontos para a migração final. Vários testes foram feitos no último momento e a instalação base foi feita em um subdiretório do domínio. Tudo estava pronto para a migração final do site, para qual seguimos os seguintes passos:

  1. Backup da versão 1.5
  2. Site é colocado em modo offline
  3. Migração dos dados com SP Upgrade (cerca de um minuto)
  4. Cópia das tabelas de extensões para o banco da versão 2.5 (cerca de um minuto)
  5. Na versão 2.5
    1. Instalação das extensões de terceiros
    2. Aplicação dos scripts das extensões de terceiros
    3. Indexação do conteúdo pela Busca Dinãmica do Joomla
    4. Resolução de problemas de permissões com o ACL Manager
  6. Aplicação do script de migração customizado (cerca de meio minuto)
  7. Mover os arquivos do Joomla 1.5 para um diretório de arquivamento (cerca de meio minuto)
  8. Mover os arquivos do Joomla 2.5 para a raiz do site (cerca de meio minuto)
  9. Modificar os caminhos de /tmp/ e /log/ no arquivo configuration.php e apagar o script de migração do servidor (cerca de meio minuto)
  10. Colocar o site da Exact em modo online de novo

Uma migração em seis minutos com sucesso

Como se pode ver o site da Exact Netherlands ficou fora do ar por apenas seis minutos. Durante esse tempo todo o site foi teve seus dados migrados da versão Joomla 1.5 para 2.5.

Os visitantes não perceberam nenhuma diferença, os formulários preenchidos antes da migração foram processados e migrados com sucesso. Editores de conteúdo notaram uma nova interface renovada após o novo login, mas encontraram todas suas mudanças no site migrado. Nenhum dado foi perdido.

O sucesso da migração em tempo tão curto precisava ser celebrada. Para isso, comemoramos com os deliciosos Joomla Stroopwafels que tinham acabado de sair do forno!

joomla-stroopwafels

Alguns lembretes importantes para a migração

  1. Limpeza: certifique-se que o site esteja totlmente limpo. Remova artigos, categorias e módutls que não são mais usados e esvaziem a lixeira antes da migração.
  2. Faça o backup e teste: sempre faça um backup do site e certifique-se que a restauração está funcionando corretamente.
  3. Teste, teste, teste e teste: acredito que você não gostará de surpresas durante a migração. Saiba o que esperar, sempre testando a migração exaustivamente antes da migração final.
  4. Reativação de emergência: certifique-se que você poderá colcar a versão anterior do site a qualquer momento durante a migração.
  5. Não fique esperando: migre agora. As versões 2.5 e 3.x são atualmente suportadas pelo projeto Joomla. São seguras, estáveis e possuem um grande quantidade de novos recursos e melhorias.

Escrito originalmente por para a edição de Março de 2014 da Joomla Community Magazine

Read 3553 times
Tagged under Portuguese (Brazil)
Helvecio da Silva

Helvecio da Silva

Graphic and webdesigner, uses Joomla since 2005. Currently based in Rio de Janeiro, Brazil, he runs his own design studio - HLVC Design - where he acts as a consultant in web and graphic design, Joomla, Wordpress, Online Social Media and Online Marketing. Passionate about his work and Joomla, he is always eager to find more and more about the system and share his knowledge with the community
- - -
Designer Gráfico e Web, usa Joomla desde 2005. Atualmente baseado no Rio de Janeiro, trabalha em seu próprio estúdio - HLVC Design - onde atua como designer para web e gráfico, consultor em Joomla, Wordpress, Midias Sociais e Marketing Online. Sua paixão em saber, o leva a sempre conhecer mais a fundo o sistema e a compartilhar o que aprende com a comunidade.

Language Switcher

Current Articles