ti-enxame.com

Arquivos de migração - geração de scripts de migração sql pós-atualização

Eu estou procurando uma maneira organizada de executar atualizações do joomla localmente e, em seguida, atualizar os sistemas de produção por meio da implantação de código + migrações de db, para que eu não precise atualizar o joomla na produção ou desabilitar o site enquanto estiver executando as atualizações. O componente de atualização atual usa uma função específica para executar atualizações do sql

https://github.com/joomla/joomla-cms/blob/staging/administrator/components/com_joomlaupdate/models/default.php#L515

No finaliseUpgrade, parece que está buscando/analisando algumas consultas e aplicando-as ao esquema. Se eu entendi isso corretamente, ele percorre os scripts/marcadores em com_admin/sql/{DBType}/*. Sql, detectando todas as novas versões de arquivos sql que precisam ser executadas no banco de dados.

O problema com esses scripts é que não vejo como posso usá-los como uma ferramenta de migração para meu banco de dados de produção, pois eles são prefixados por tabela e também prefiro ter um único script de migração consolidado.

Você poderia sugerir se o joomla realmente grava as alterações realizadas em algum lugar de um arquivo de migração?

O arquivo logs/joomla_update.php contém alguns vestígios das alterações, mas estes são truncados, pois aparentemente registram apenas alguns caracteres

Qualquer sugestão é muito apreciada.

3
Bizmate

Dois cenários:

Desenvolvimento, criação temporária, produção

A produção é somente leitura, o armazenamento temporário é onde o conteúdo é preparado e os testes são feitos. O Joomla é sempre atualizado no armazenamento temporário, o banco de dados é salvo junto com o commit e restaurado na produção pull.

Desenvolvimento, Plataforma, Produção

O conteúdo é editado em Produção. As atualizações do Joomla são realizadas no armazenamento temporário. Depois de empurrá-los, basta acessar as extensões/banco de dados e pressionar Fix. Ou, para servidores maiores, automatize-o com um plug-in do sistema (escreva um plug-in que escute alguns parâmetros no onAfterRoute, verifique se é uma chamada local ($ _SERVER ['REMOTE_ADDR'] = '127.0.0.1' e agende uma tarefa cron para invoque-o).

Atualização

Para executar as atualizações de banco de dados após cada atualização de versão, você tem duas maneiras:

Automático

Vá para administrador - extensões - gerenciador de extensões, clique em banco de dados à esquerda e clique em "Corrigir" na parte superior.

Se esta página tiver erros (o caso ao atualizar de 2,5 para 3,3), tente ir diretamente para o URL:

/administrator/index.php?option=com_installer&view=database

Manual

Quando o acima falhar, (veja também o comentário de @ Diego abaixo):

 find administrator/components/com_admin/sql/updates/mysql/3*.sql | grep mysql > 33.listsql

e organizar os arquivos relevantes (as versões afetadas estão no nome do arquivo)

Então, desde que j25 seja seu prefixo db

cat 33.listsql | xargs cat > 33.sql
sed -i 's/#_/j25/' 33.sql
mysql -u user --password="somepass" dbname < 33.sql
1
Riccardo Zorn