Version 3 (modified by jeanferri, 5 anos atrás) (diff)

--

Migração do Portal Modelo 3

O Portal Modelo 2.0 foi criado utilizando a versão 2.5 do Plone, enquanto o Portal Modelo 3.0 é construído sobre a versão 4.3 do Plone. No período contido entre o lançamento do Portal Modelo 2.0 e do Portal Modelo 3.0 o Plone teve 8 versões e 55 releases e, para qualquer software, uma atualização com tantos passos intermediários deveria ser muito bem estudada.

É importante lembrar que a equipe de desenvolvimento do Plone tem dedicado um cuidado especial ao tópico da atualização de versões e que se estivéssemos falando apenas de conteúdos criados com os tipos de conteúdo base do Plone a migração entre as versões seria apenas a questão de copiar a base do site antigo para o site novo e iniciar o mecanismo de atualização do próprio Plone.

Porém o Portal Modelo 2.0 continha diversos produtos adicionais (de terceiros), como por exemplo o PlonePopoll?, CMFSin e etc, e estes foram descontinuados ou não possuem um mecanismo de migração completo e confiável. Isto somado ao fato que a própria arquitetura da informação foi reestruturada para o Portal Modelo 3.0, elimina uma migração utilizando apenas o mecanismo existente no Plone.

A abordagem escolhida para realizar esta migração entre diferentes versões do Portal Modelo foi a de exportarmos todo o conteúdo para um formato intermediário, serialização dos dados como arquivos em formato JSON no sistema de arquivos, e realizar a importação dos mesmos em uma nova estrutura com o Portal Modelo 3.0 instalado.

Exportação dos Dados

Para a realização da exportação dos dados de um Portal Modelo 2.0 existente é preciso alterar suas configurações para incluírem mais dois pacotes Python: simplejson e collective.jsonify.

Como o Portal Modelo 2.0 utiliza Python 2.4 temos que garantir que a versão do simplejson seja a 2.1.0 e isto é feito durante a sua instalação com o comando easy_install (do mesmo interpretador Python usado para a execução do portal):

$ easy_install 'simplejson==2.1.0'

Caso o comando easy_install não esteja disponível sua instalação será feita da seguinte maneira:

$ wget https://bitbucket.org/pypa/setuptools/raw/bootstrap-py24/ez_setup.py
$ python ez_setup.py

Para a instalação do pacote collective.jsonify é necessário baixá-lo do repositório GitHub?, descompactá-lo e então instalá-lo no mesmo interpretador Python do Portal Modelo 2.0:

$ wget https://github.com/collective/collective.jsonify/archive/master.zip
$ mkdir collective.jsonify
$ cd collective.jsonify
$ mv ../master.zip ./
$ unzip master.zip
$ cd collective.jsonify-master
$ python setup.py install

Nota: O Python executado acima é o mesmo que está executando o Portal Modelo, e se não for o mesmo Python padrão do sistema operacional será necessário usar o path completo do executável do Python usado para instalar o Zope.

Com ambos os pacotes instalados podemos executar a exportação utilizando o script exporta.py a seguir:

# -*- coding: utf-8 -*-
from AccessControl.SecurityManagement import newSecurityManager
from collective.jsonify import get_item

import simplejson as json
import os

def get_children(path):
    children = ct.searchResults(path={'query': path,
                                      'depth': 1},
                                sort_on='getObjPositionInParent')
    if children:
        data = [{'id': b.getId,
                 'title': b.Title,
                 'portal_type': b.portal_type}
                for b in children]
        arq = open('dados%s/children.json' % path, 'wb')
        arq.write(json.dumps(data))
        arq.close()

newSecurityManager(None, app.acl_users.getUserById('admin'))  # noqa

site = app.portalmodelo  # noqa
path = '/portalmodelo'

ct = site.portal_catalog
uid_catalog = site.uid_catalog

all_uids = uid_catalog()
p_to_uid = dict([('%s/%s' % (path, b.getPath()), b.UID) for b in all_uids])


get_children(path)
results = ct.searchResults(path=path)

for brain in results:
    obj = brain.getObject()
    data = get_item(obj)
    path = brain.getPath()
    if not os.path.exists('dados%s' % path):
        os.makedirs('dados%s' % path)
    arq = open('dados%s/data.json' % path, 'wb')
    arq.write(data)
    arq.close()
    get_children(path)
    uid = p_to_uid[path]
    print uid, path, len(data)

Para cada site a ser exportado deve-se alterar as variáveis site e path, substituindo o valor portalmodelo pelo valor adequado (o nome curto do site). Este script deve estar no diretório raiz da instalação do Portal Modelo 2.0 e para seu funcionamento já deve ter sido criada uma pasta chamada dados neste mesmo local.

A execução do script deve ser feita utilizando-se o comando zopectl:

$ ./bin/zopectl run exporta.py

Ao término da execução teremos toda a estrutura do Portal Modelo 2.0 replicada, como arquivos JSON, dentro do diretório dados/<id_do_site>.

Importação dos Dados

A importação dos dados é implementada no pacote interlegis.portalmodelo.policy utilizando-se do mecanismo chamado Transmogrifier. Foi criada uma pipeline chamada portalmodelo20 que contempla a migração dos conteúdos para dentro do Portal Modelo 3.0.

Para seu funcionamento é necessário que esteja definida uma variável de ambiente chamada SITE_EXPORT indicando onde estão os arquivos da exportação dos dados, por exemplo:

$ export $SITE_EXPORT=/home/interlegis/dados/cm_brasopolis/

A execução da pipeline é feita, via navegador, ao acessar o endereço http://<site>/@@importa-pm20. Este endereço existe apenas para usuários autenticados no portal e autorizados com o papel de Manager. Tente sempre realizar este acesso diretamente na instância de produção -- sem passar por servidores web e/ou proxies -- pois como o procedimento de importação toma um tempo considerável é provável que ocorra um timeout de qualquer servidor intermediário.

Considerações

O processo de migração dos dados foi testado com Portal Modelo 2.0 e o conteúdo gerado com ele. Caso existam pacotes adicionais e/ou personalizações feitas sobre a solução, não é garantido o sucesso da migração.

Como houve a alteração da arquitetura da informação entre as versões 2.0 e 3.0 do Portal Modelo, trabalhamos para que a migração dos dados seguisse este novo padrão, porém é recomendado que o gestor do portal faça uma análise minuciosa do conteúdo migrado.

Layouts e personalizações visuais do design do site não serão levadas para o novo ambiente, pois implicam em mudanças visuais e estruturais de interface que não têm como ser automatizadas, já que no Portal Modelo 3 as customizações de layout são feitas utilizando-se o Diazo com temas empacotados e importados no portal.


Voltar para o ProjetoPortalModelo

Anexos (1)

Download de todos os anexos como .zip

 

The contents and data of this website are published under license:
Creative Commons 4.0 Brasil - Atribuir Fonte - Compartilhar Igual.