---
# System prepended metadata

title: Migração SAPL 2.5 to 3.1

---

Migração SAPL 2.5 to 3.1
====
Passo a passo.

Criar uma VM com o Ubuntu 16.04, com espaço no mínimo 10 vezes superior ao tamanha do DocumentosSapl.fs;
Levar o backup do DocumentosSapl.fs, Data.fs e do mysql do servidor do SAPL antigo para a VM criada no passo anterior (1); (Roteiro para Backup e Restore)
Instalar o SAPL 2.5 (Roteiro de instalação do SAPL 2.5)
Restaurar o banco de dados (mysql) do SAPL 2.5  (Roteiro para Backup e Restore).
O nome do banco de dados a ser criado para a restauração é sapl_cm_car
Observe que o car na nomeclarura acima é o nome do município
Não tem necessidade de restaurar o DocumentosSapl.fs e Data.fs no Sapl 2.5.
Instalar o SAPL 3.1 (não precisa instalar o SAPL_frontend)
Iniciar o processo de migracão
Criar as pastas ~/migracao_sapl/
Criar as pastas ~/migracao_sapl/datafs
Criar as pastas ~/migracao_sapl/repos
Criar as pastas ~/migracao_sapl/logs
Criar as pastas ~/migracao_sapl/dumps_mysql (talves estes em amarelo não sejam necessários, pois criei para tentar resolver o passo 12)exit
Copiar os arquivos Data.fs e DocumentosSapl.fs para a pasta criada acima
Renomear o arquivo Data.fs para Data_cm_car.fs (onde car é abreviação de Carneirinho, segundo a tabela de timezones)
Renomear o arquivo  DocumentosSapl.fs para DocumentosSapl_cm_car.fs (onde car é abreviação de Carneirinho, segundo a tabela de timezones)
Copiar o arquivo "tabela_timezones.yaml" para a pasta ~/migracao_sapl/
Editar o arquivo "tabela_timezones.yaml" e adicionar o município, seguindo o padrão dos municípios já adicionados;
Criar um arquivo chamado .env dentro de /var/interlegis/sapl/sapl/legacy, com o seguinte conteúdo:
DATABASE_URL_FONTE = mysql://root:123456@localhost:3306/sapl_cm_car 
DATABASE_URL_DESTINO = postgresql://sapl:sapl@localhost:5432/sapl
Observe que na primeira linha root é o nome do usuário, 123456 é a senha e sapl_cm_car é o nome do banco de dados
Acesse a pasta /var/interlegis/sapl/sapl e edite o arquivo legacy_migration_settings.py e altere a linha DEBUG = True  para DEBUG = False
Inicie o processo descrito em Migração de Dados do sapl 2.5 e faça até In [2]: migrar_dados()


Emperrou aqui ./manage.py shell --settings=sapl.legacy_migration_settings
In [1]: from sapl.legacy.migracao import migrar_dados
In [2]: migrar_dados()

Com esta mensagem

In [1]: from sapl.legacy.migracao import migrar_dados                                                                                            
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-1-446a6f25e323> in <module>
----> 1 from sapl.legacy.migracao import migrar_dados

/var/interlegis/sapl/sapl/legacy/migracao.py in <module>
      6 from unipath import Path
      7
----> 8 from sapl.legacy.migracao_dados import (REPO, TAG_MARCO, gravar_marco, info,
      9                                         migrar_dados)
     10 from sapl.legacy.migracao_documentos import migrar_documentos

/var/interlegis/sapl/sapl/legacy/migracao_dados.py in <module>
    133
    134
--> 135 field_renames, model_renames = get_renames()
    136 legacy_app = apps.get_app_config('legacy')
    137 models_novos_para_antigos = {

/var/interlegis/sapl/sapl/legacy/migracao_dados.py in get_renames()
    118                 continue
    119             elif isinstance(renames, str):
--> 120                 renames = includes[renames]
    121             # detecta mudança de nome
    122             match = MODEL_RENAME_PATTERN.match(model_name)

KeyError: '<AbstractOrador>'



Na outra VM acho que encontro a solução




Arquivos





Links

Instalação do SAPL
https://github.com/interlegis/sapl/blob/3.1.x/docs/instalacao31.rst

https://colab.interlegis.leg.br/wiki/SAPL31Docker

https://github.com/interlegis/sapl/wiki/Migra%C3%A7%C3%A3o-sapl-2.5-para-3.1

Comandos docker https://medium.com/dockerbr/principais-comandos-docker-f9b02e6944cd

https://colab.interlegis.leg.br/wiki/HOWTO-InstalarSAPL25Ubuntu

https://colab.interlegis.leg.br/wiki/HOWTO-SAPLBackup

https://github.com/interlegis/sapl


Anotações Varidadas

Instalar o pyhton-dev para resolver o problema da isntalacao do zope na mibracao dos usuarios
https://stackoverflow.com/questions/26053982/setup-script-exited-with-error-command-x86-64-linux-gnu-gcc-failed-with-exit

Esse erro 
/persistent/cPersistence.o                                                                                                            [108/9445]
    In file included from persistent/cPersistence.h:18:0,
                     from persistent/cPersistence.c:19:
    persistent/_compat.h:18:20: fatal error: Python.h: Arquivo ou diretório não encontrado
    compilation terminated.
    error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
    
    ----------------------------------------
Command "/var/interlegis/.virtualenvs/p27sapl/bin/python2.7 -u -c "import setuptools, tokenize;__file__='/tmp/pip-install-6NqC_3/persistent/setu
p.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install -
-record /tmp/pip-record-rZa8pk/install-record.txt --single-version-externally-managed --compile --install-headers /var/interlegis/.virtualenvs/p
27sapl/include/site/python2.7/persistent" failed with error code 1 in /tmp/pip-install-6NqC_3/persistent/

#######################3

Instalar o Git annex

sudo apt-get install git-annex


http://git-annex.branchable.com/install/Ubuntu/

##########################

Pasta onde devem ficar o data fs

/home/administrador/migracao_sapl/datafs


##############################

Nomes do Data FS  e DocumetosSapl.fs

Data_cm_can.fs

DocumentosSapl_cm_can.fs

Onde o CAN é a inicial do município citada no arquivos indice yaml



#########################

Ultimo erro!

No handlers could be found for logger "ZODB.Connection"
Traceback (most recent call last):
  File "./exporta_zope.py", line 494, in <module>
    dump_sapl(sigla)
  File "./exporta_zope.py", line 475, in dump_sapl
    _dump_sapl(data_fs_path, documentos_fs_path, destino, salvar, mtimes)
  File "./exporta_zope.py", line 403, in _dump_sapl
    docs = br(sapl['sapl_documentos'])
  File "./exporta_zope.py", line 89, in br
    return obj.__Broken_state__
  File "/var/interlegis/.virtualenvs/p27sapl/local/lib/python2.7/site-packages/ZODB/Connection.py", line 800, in setstate
    self._reader.setGhostState(obj, p)
  File "/var/interlegis/.virtualenvs/p27sapl/local/lib/python2.7/site-packages/ZODB/serialize.py", line 622, in setGhostState
    state = self.getState(pickle)
  File "/var/interlegis/.virtualenvs/p27sapl/local/lib/python2.7/site-packages/ZODB/serialize.py", line 615, in getState
    return unpickler.load()
  File "/var/interlegis/.virtualenvs/p27sapl/local/lib/python2.7/site-packages/ZODB/serialize.py", line 491, in _persistent_load
    return self.loaders[reference_type](self, *args)
  File "/var/interlegis/.virtualenvs/p27sapl/local/lib/python2.7/site-packages/ZODB/serialize.py", line 568, in load_multi_oid
    conn = self._conn.get_connection(database_name)
  File "/var/interlegis/.virtualenvs/p27sapl/local/lib/python2.7/site-packages/ZODB/Connection.py", line 357, in get_connection
    new_con = self._db.databases[database_name].open(
KeyError: 'main'

#####
Comando correto para esta parte é o debaixo

Com o virtualenv ativado e na pasta sapl/legacy/scripts/exporta_zope rode a exportação usando a função exporta_zope.dump_sapl com o caminho do Data.fs como parâmetro. A forma mais simples de fazer isso é rodar o script exporta_zope com o caminho do Data.fs como argumento. Por exemplo:
    > ./exporta_zope.py caminho/para/Data.fs.old

./exporta_zope.py /home/administrador/migracao_sapl/Data_cm_can


#######


Erro DocumentosSapl.fs é o dono e grupo do arquivo? não era :-(


Este erro

  File "./exporta_zope.py", line 494, in <module>
    dump_sapl(sigla)

  File "./exporta_zope.py", line 475, in dump_sapl
    _dump_sapl(data_fs_path, documentos_fs_path, destino, salvar, mtimes)

  File "./exporta_zope.py", line 403, in _dump_sapl
    docs = br(sapl['sapl_documentos'])

  File "./exporta_zope.py", line 89, in br
    return obj.__Broken_state__

  File "/var/interlegis/.virtualenvs/p27sapl/local/lib/python2.7/site-packages/ZODB/Connection.py", line 800, in setstate
    self._reader.setGhostState(obj, p)

  File "/var/interlegis/.virtualenvs/p27sapl/local/lib/python2.7/site-packages/ZODB/serialize.py", line 622, in setGhostState
    state = self.getState(pickle)

  File "/var/interlegis/.virtualenvs/p27sapl/local/lib/python2.7/site-packages/ZODB/serialize.py", line 615, in getState
    return unpickler.load()

  File "/var/interlegis/.virtualenvs/p27sapl/local/lib/python2.7/site-packages/ZODB/serialize.py", line 491, in _persistent_load
    return self.loaders[reference_type](self, *args)

  File "/var/interlegis/.virtualenvs/p27sapl/local/lib/python2.7/site-packages/ZODB/serialize.py", line 568, in load_multi_oid
    conn = self._conn.get_connection(database_name)

  File "/var/interlegis/.virtualenvs/p27sapl/local/lib/python2.7/site-packages/ZODB/Connection.py", line 357, in get_connection
    new_con = self._db.databases[database_name].open(
KeyError: 'main'

Após muito testar, descobri que o erro estava relacionado ao Key erro  value n que aparece quando se faz o pack do documetosSapl.fs, para corrigir isto removi dois arquivos estranhos ao sistema padrao de pastas. Depois da remoção o pack rodou e a migração teve continuidade.

##########################################