Minha equipe e eu estamos trabalhando com um cliente que tem um site WordPress existente com um pouco de conteúdo e um tema personalizado que eles criaram. É um blog de grupo, o que significa que tem vários blogueiros ao redor do mundo que estão adicionando e editando conteúdo o tempo todo.
Nosso trabalho é criar um tema totalmente novo, com alguns recursos novos. Alguns desses recursos exigirão novos campos personalizados de widgets, plug-ins e banco de dados.
Atualmente estamos trabalhando em nossas próprias máquinas de desenvolvimento e integrando-as em um único servidor de desenvolvimento. Todo o código é versionado no SVN. Nosso DBA nomeado está mesclando manualmente qualquer alteração de banco de dados no banco de dados dev no momento, embora esperamos que ele seja capaz de automatizar isso em breve.
Acabamos de começar a falar sobre nosso processo de lançamento de produção. Significado: quando terminarmos, como é que vamos colocar todo o nosso código personalizado no servidor de produção (o live) sem problemas e com o mínimo de interrupção possível?
Temos alguns planos em mente, mas adoraria saber como os outros abordaram essa questão também. Há alguma melhor prática a seguir ou armadilhas conhecidas a serem evitadas?
Se você seguir o conselho de SethMerrick, você pode reduzir muito o tempo de troca abaixando o TTL nos registros DNS apropriados para 5 minutos ou mais várias horas (dependendo do que o atual TTLé) antes de alterar o endereço IP.
Ao fazer isso, você está dizendo aos servidores DNS remotos para armazenar em cache o endereço por 5 minutos. Depois de alterar o IP, você pode aumentar o TTL para o que quer que fosse antes. Para minimizar ainda mais o efeito, faça a transição durante um período de baixo tráfego.
Não tenho certeza se isso é aplicável, mas acabei de passar por um processo semelhante de migração simultânea e atualização de um site de tráfego intenso.
A estratégia básica era trabalhar em um servidor de teste e, quando tudo estivesse pronto, fazer um mysql dump no servidor live, importá-lo para o servidor de temporariedade, fazer qualquer limpeza necessária e apontar os registros DNS para o servidor de temporariedade, causando o servidor intermediário para se tornar o novo servidor ativo.
O pouco complicado é mesclar todos os dados que se acumulam durante a propagação do DNS no servidor de temporariedade (que agora é o servidor ativo). Em outras palavras, se 30 horas se passarem entre o momento em que você faz seu mysql dump/update DNS e quando a propagação do DNS estiver completa, você terá que mesclar seletivamente 30 horas de registros do site antigo para o novo.
Não é um processo contínuo, mas quando chegamos a uma semana na estrada, todas as dobras se suavizaram.
@Mike Lee: Ótima pergunta, e um dos mais sagrados grails do WordPress (ou qualquer um dos principais CMSs de código aberto com os quais eu esteja familiarizado, como Drupal, Joomla, etc.)
Embora certamente não se destine a abordar seu caso de uso, verifique minha resposta a uma pergunta relacionada que descreva um plug-in de nível beta que acabei de disponibilizar via WordPress Answers Exchange chamado WP Migrar Webhosts (sim, eu sugo quando se trata de nomeação criativa.)
Mas eu também quero resolver o caso de uso que você descreve com um plugin e atualmente estou pensando em como fazer isso. Eu estou pensando que a maneira de abordá-lo é desistir de resolvê-lo genericamente e, em vez disso, abordar os padrões conhecidos que existem no WordPress e, em seguida, permitir que qualquer outra pessoa " hook " meu plugin para casos de uso especiais. Também estou pensando que uma abordagem é serializar os dados e estruturas no WordPress como dados em um arquivo PHP para que um futuro plugin possa aplicar essas mudanças como deltas, assim como um sistema de controle de código-fonte aplica deltas para chegar na versão atual do código-fonte.
Então, enquanto eu não estou respondendo ou resolvendo o seu problema na íntegra, espero que eu esteja lhe dando uma boa comida para pensar e também esperando que você ou alguém mais queira colaborar em uma eventual solução.