desenv-web-rp.com

Implantando alterações complexas

Ocasionalmente, precisamos implantar alterações bastante complexas em um site que exijam alterações nos bancos de dados (tabelas novas ou alteradas) e no código-fonte dinâmico (como PHP ou ColdFusion). Qual é a melhor maneira de empacotar e implantar essas alterações rapidamente, sem quebrar tudo no site ativo?

4
Justin Scott

Resposta curta: é uma dor no pescoço!

Eu tive que fazer isso várias vezes (e toda vez me faz querer pensar mais no meu design no próximo projeto que faço). O que faço é bifurcar a base de código em uma seção de Desenvolvimento (ou pasta, ou servidor etc.) para que eu possa trabalhar separadamente para garantir que todos os bugs estejam fora antes de passar para a implantação. Em seguida, crio um script SQL que sempre tem as mesmas duas primeiras linhas:

DELETE IF EXISTS newDatabaseName;
CREATE DATABASE newDatabaseName;

Isso garantirá que o script coloque tudo em um banco de dados completamente novo e vazio. O restante do script recriará todas as tabelas que estou reutilizando do banco de dados antigo para o novo. Então, criarei as novas tabelas (ou modificadas) no novo banco de dados. Finalmente, moverei todos os dados do servidor ativo para o servidor de desenvolvimento. Isso pode levar um longo tempo, dependendo da quantidade de dados que você está movendo e da rapidez com que é possível movê-lo. Por isso, recomendo que você pense no script com cuidado, pois quanto menos for forçado a executá-lo, melhor.

Depois de instalar e executar o novo banco de dados de desenvolvimento, o resto é criar o novo código para usá-lo. Depois de resolvido, a implantação deve ser relativamente fácil (embora possivelmente demorada). Basta usar o mesmo script para copiar todos os novos dados ativos para o novo banco de dados no servidor de implantação e copiar todo o novo código lá, e pronto!

É assim que eu faço, e embora seja doloroso, funciona. Se houver uma maneira melhor, eu ficaria feliz em ouvir.

Atualização: Em resposta ao comentário de Tchalvak, sim, eu costumo usar o seguinte para obter todas as definições de tabela sem seus dados reais:

mysqldump --databases --no-data databaseName > newScript.sql

Vou então alterar este script como descrito acima.

3
Mike

Para obter "a capacidade de reverter", eu realmente sugiro conhecer (bem) git ou Mercurial(sistemas de controle de versão distribuídos) .

Os dias em que você deve trabalhar com seu código-fonte em arquivos simples terminaram (agora você deve trabalhar com ele em arquivos simples, mas tenha um sistema de controle de alterações realmente robusto que os rastreie).

2
Kzqai

Eu geralmente faço (para sites no estilo LAMP):

  1. defina suas alterações escreva um script para aplicá-las (eu uso um Makefile).
  2. Teste suas alterações em uma amostra de dados que representa o ambiente real
  3. Teste novamente para garantir
  4. Dê a si mesmo uma saída, tenha a capacidade de reverter

Se você estiver executando um cluster, poderá ter dores de cabeça maiores com o estado do site, caches e assim por diante.

0
Aiden Bell