Passo a passo para migração

Atualização de versão

Esse guia explica como atualizar uma versão mais antiga do AtoM (incluindo as versões do ICAAtoM
1.1 a 1.3.1 ou mais recentes) para a 2.3.
Importante
Se você utiliza uma versão mais antiga do ICA-AtoM (anterior a 1.1), por favor atualize
para a última versão do ICA-AtoM antes de seguir as instruções.
Considere a desativação do seu site durante a atualização. Redirecione os usuários para uma página
de manutenção ou coloque o seu site no modo de “somente leitura” ao executar a atualização.

Copie os dados antigos

Neste ponto, você deve ter uma instalação funcional do AtoM 2.3, utilizando um banco de dados
novo.
1.  copiar o conteúdo do diretório uploads antigo, assim como o banco de dados:

sudo su
cd /home/fiocruz
wget http://www.blogbasearch.coc.fiocruz.br/wp-content/uploads/2016/02/icaatom130.sql
wget http://www.blogbasearch.coc.fiocruz.br/wp-content/uploads/2016/02/r.tgz
wget http://www.blogbasearch.coc.fiocruz.br/wp-content/uploads/2016/02/uploads.tgz
tar -vxzf r.tgz
tar -vxzf uploads.tgz
cp -R uploads/* /usr/share/nginx/atom/uploads
cp -R r/ /usr/share/nginx/atom/

2. Delete e recrie o novo banco de dados AtoM para remover tabelas e colunas desnecessárias:

mysql -uroot -p -e 'drop database atom; create database atom character set utf8 collate utf8_unicode_ci;'

3. Agora, carregue o conteúdo dentro do novo banco de dados:

mysql -uroot -p atom < icaatom130.sql

Execute a rotina de atualização

Aqui talvez seja o passo mais crítico no processo de upgrade. Se você encontrar algum erro, por
favor consulte o FAQ do AtoM, pesquise no Grupo do Google
https://groups.google.com/forum/#!forum/ica-atom-users, e caso você não encontre uma solução,
sinta-se à vontade para deixar uma pergunta lá mesmo.
Em primeiro lugar, mude o diretório atual:

cd /usr/share/nginx/atom

Agora, execute a tarefa upgrade-sql:

php symfony tools:upgrade-sql

Gerar novamente a referência dos objetos digitais e thumbnails (opcional)

Se você estiver atualizando a partir da versão 1.3.1 ou anterior, você pode querer reindexar a
referência do objeto digital e imagens thumbnails. O tamanho dos thumbnails era menor no AtoM
1.x, para que estas imagens, muitas vezes, pudessem aparecer. Uma convenção de nomenclatura para
o diretório também foi adicionada para tornar a localização do objeto digital mestre mais segura.
Primeiro, verifique se você está no diretório ( /usr/share/nginx/atom).
Agora, execute a tarefa regen-derivatives:

php symfony digitalobject:regen-derivatives

Reconstrua o índice de pesquisa e limpe o cache

Para que todas essas mudanças tenham efeito, você precisará reindexar os arquivos que você
importou em seu banco de dados e limpar o cache.
Em primeiro lugar, reconstrua o índice de pesquisa:

php symfony search:populate

Em seguida, atribua permissões para o usuário do NGINX e limpe o cache para remover todos os dados desatualizados da aplicação:

chown www-data:www-data /usr/share/nginx/atom/
./refresh.sh

Observação: O arquivo refresh.sh só tem na nossa customização! É necessário criá-lo (dentro da raiz do AtoM

nano refresh.sh

Com o seguinte conteúdo:

sudo php /usr/share/nginx/atom/symfony cc
sudo php /usr/share/nginx/atom/symfony cc
sudo service php5-fpm restart
sudo service nginx restart

Erros na migração (conteúdo extra)

Seguem abaixo alguns erros encontrados durante a migração da versão 1.3 para a 2.1:
SQLSTATE [42S01]: Base table or view already exist: 1050 Table ‘aip’ already exists
SQLSTATE [42S01]: Base table or view already exist: 1050 Table ‘access_log’ already exists

Solucionamos esse tipo de erro acima efetuando a exclusão das tabelas.

mysql –uroot –p –e “drop table atom.access_log”;
mysql –uroot –p –e “drop table atom.aip”;

Ao aplicar o commando php symphony search:populate a fim de persistir os dados no banco,
podemos nos deparar com alguns erros como o travamento da operação. Esse bloqueio pode
se dar pelas seguintes razões mais conhecidas:
1. Registros vazios nas tabelas
Procure identificar os registros-pai a fim de rastrear a exclusão. É importante também
remover a referência na tabela atom.slug

Abaixo exemplificamos com comandos SQL a ordem como os registros devem ser excluídos, começando pelo mais granular. Ao acharmos o registro Planeta, descobrimos que ele tem vários filhos até chegarmos no registro Cidade. Precisamos começar a exclusão do menor para o maior nível.

SELECT * FROM atom.information_object_i18n where title like "%Planeta%";

SELECT * FROM atom.information_object where parent_id=8144; Fundo Planeta

SELECT * FROM atom.information_object where parent_id=101113; Grupo Continente

SELECT * FROM atom.information_object where parent_id=101955; Subgrupo País

SELECT * FROM atom.information_object where parent_id=102019; Item Cidade

-------------------------------------------

SELECT * FROM atom.information_object_i18n where id=101113;
SELECT * FROM atom.information_object where id=101113;
SELECT * FROM atom.slug where object_id=101113;
SELECT * FROM atom.object where id=101113;

#Essas devem ser as últimas exclusões no banco
DELETE  FROM atom.information_object_i18n where id=101113;
DELETE  FROM atom.information_object where id=101113;
DELETE  FROM atom.slug where object_id=101113;
DELETE  FROM atom.object where id=101113;

----------------------------------------

SELECT * FROM atom.information_object_i18n where id=101955;
SELECT * FROM atom.information_object where id=101955;
SELECT * FROM atom.slug where object_id=101955;
SELECT * FROM atom.object where id=101955;


delete FROM atom.information_object_i18n where id=101955;
delete FROM atom.information_object where id=101955;
delete from atom.slug where object_id=101955;
delete from atom.object where id=101955;


----------------------------------

SELECT * FROM atom.information_object_i18n where id=102019;
SELECT * FROM atom.information_object where id=102019;
SELECT * FROM atom.slug where id=102019;
SELECT * FROM atom.object where id=102019;

#Essas devem ser as primeiras exclusões
delete FROM atom.information_object_i18n where id=102019;
delete FROM atom.information_object where id=102019;
delete from atom.slug where object_id=102019;
delete from atom.object where id=102019;

2. Registros persistidos com os seguintes caracteres em sequência “;
Segue abaixo o código SQL para “limpar” os registros do banco que contem a
expressão “;
O Atom não deixa persistir os dados caso haja um registro com esses caracteres em
sequência no banco.
Segue um exemplo real:

select id, title from icaatom130.information_object_i18n where title like '%”;%';

Com o comando acima selecionamos o id e o título na tabela principal onde ficam os
registros a fim de identificarmos os que contém os caracteres “;

 

update icaatom130.information_object_i18n set title = replace(title, '”;', '”,') where id in (
7692,
7761,
24008,
24012,
24165,
24168,
24307,
56671,
56828,
56832,
143904,
150713,
23
150714,
150715,
150717);

Acima aplicamos um update em todos os registros encontrados e fizemos a
substituição dos caracteres “; por ‘,
Após esse procedimento tente o comando abaixo novamente:

php symphony search:populate