ti-enxame.com

Existe uma maneira de detectar as alterações no banco de dados que foram feitas por extensões de terceiros?

Trabalho em um ambiente de desenvolvimento/teste/produção e enfrentei alguns desafios na promoção de código de um ambiente para outro, especialmente quando são necessárias atualizações para o Joomla e outros softwares de terceiros.

Existe uma maneira de descobrir quais instruções sql foram executadas no banco de dados desde uma determinada data para que eu possa aplicá-las em ambientes diferentes, sem precisar atualizar cada ambiente?

7
ContextSwitch

Resposta simples é não.

Resposta estendida é que o mysql pode registrar consultas, no entanto, possui limites, e se houver pelo menos uma diferença entre os ambientes, isso levaria as consultas a não funcionarem. Mesmo com isso, a única maneira de fazer isso é através do próprio servidor, pois, até onde sei, não há registro especial adicionado ao JDatabase (também se um componente não usa o JDatabase, o controle diminui ainda mais).

Com o exposto acima, você pode ver em um mundo perfeito; existe uma maneira; no entanto, se você passar do dev para o live, você atualmente possui um site ao vivo que realiza consultas por conta própria e é "diferente" do que o dev/staging atual versão. Portanto, se um usuário se inscreveu no site ativo e você atualizou o Joomla no dev, a atualização para a tabela de usuários adicionaria a necessidade de adicionar manualmente novamente esse usuário (também pode haver alterações na estrutura da tabela). Agora imagine que não é um usuário, mas 10 ou mesmo 100, e o processo não pode ser automatizado.

O Joomla possui alguns recursos de atualização agradáveis, permitindo uma versão para a atualização do mysql nas tabelas, isso garante que as tabelas mantenham a estrutura que as consultas precisam, no entanto, não rastreia nenhuma inserção ou atualização nas tabelas, portanto, se você atualizar em um ambiente de desenvolvimento , a melhor maneira de atualizar na produção é seguir as mesmas etapas e atualizar também na sua produção.

No futuro, pode ser possível que o Joomla rastreie as alterações do banco de dados em seu núcleo, permitindo sincronizar uma versão de produção com uma versão de desenvolvimento; no entanto, a quantidade de trabalho para criar algo assim é loucura e teria impacto no desempenho. No momento, não acredito que exista ou deva haver planos para isso.

9
Jordan Ramstad

Os bancos de dados tendem a ser um grande problema com todo o desenvolvimento de software. Manter as coisas sincronizadas como uma grande dor para nós também, especialmente nos locais de preparação e produção.

Uma coisa que comecei a analisar recentemente, mas ainda não foi implementada, é:

http://phinx.org/

Outra 'maneira pobre do homem' é exportar os esquemas de banco de dados (se você estiver interessado em esquemas, os dados provavelmente são um animal diferente) e, em seguida, execute uma comparação de esquemas para cada banco de dados. Deve revelar as diferenças entre muito facilmente. Então você apenas tem que fazer a consolidação dos dados. Com isso, eu diria que, idealmente, você só precisa se preocupar com dados no seu ambiente de produção e mantê-los sincronizados com o ambiente de preparação. Em seguida, você pode fazer o sandbox e brincar no desenvolvimento, conforme necessário.

4
Chad Windnagle