8 min

Quando deve migrar uma app criada por vibe coding?

Saiba quando migrar uma app criada por vibe coding comparando autenticação, transferência da base de dados, segredos, mudança de domínio, indisponibilidade, limpeza e reversão.

Quando deve migrar uma app criada por vibe coding?

Migrar uma app gerada antes do lançamento é mais barato e mais simples. Migrá-la depois de ganhar tração baseia-se em mais informação, mas perdoa muito menos erros. O momento certo depende menos de o projeto ter começado no Lovable, Bolt, v0 ou Replit do que de conseguir identificar e ensaiar cada fronteira com estado que a plataforma atual controla.

Considero o lançamento o momento em que a identidade, os dados e um domínio público passam a ser promessas aos utilizadores. Antes disso, uma migração falhada custa tempo de desenvolvimento. Depois, o mesmo erro pode bloquear clientes, perder escritas, invalidar sessões ou enviar tráfego para duas versões diferentes do produto. A tração mostra o que merece sobreviver, mas também transforma uma simples mudança de código numa alteração operacional.

Não decida pelo tamanho da árvore de código-fonte. Uma app pequena com autenticação gerida e uma base de dados ativa pode ser mais difícil de mover do que um site estático grande. Decida pela propriedade: quem controla o repositório, as identidades dos utilizadores, a base de dados, os segredos, os ficheiros, o trabalho agendado, o domínio, a implementação e o caminho de reversão?

Antes do lançamento, migrar dá liberdade

Migrar antes do lançamento costuma ser a melhor escolha quando a plataforma atual não consegue cumprir um requisito conhecido de propriedade, implementação, localização dos dados ou facilidade de manutenção. Ainda tem margem para alterar esquemas, substituir a autenticação, mudar nomes de variáveis de ambiente e repor dados de teste sem ter de negociar com utilizadores.

Esta fase é especialmente favorável quando a app tem apenas contas criadas para teste e registos descartáveis. Pode exportar o código, compilá-lo num ambiente limpo, recriar a base de dados a partir das migrações e descobrir quais as partes que estavam implícitas no espaço de trabalho original. Cada falha é útil, porque revela uma dependência antes de essa dependência guardar dados de clientes.

O baixo custo nesta fase não torna o trabalho opcional. Os projetos gerados funcionam muitas vezes porque a plataforma original injeta configuração, fornece um URL da base de dados, aloja funções ou compreende uma convenção de compilação. Exportar o código-fonte prova que possui ficheiros. Não prova que outro alojamento consegue compilar e executar o mesmo sistema.

Antes do lançamento, exijo um teste em ambiente limpo. Um colega que não criou o projeto recebe apenas o repositório, uma lista escrita de segredos com valores de desenvolvimento seguros e as instruções de configuração. Se essa pessoa não conseguir chegar a um início de sessão funcional, criar um registo e concluir o principal percurso do utilizador, o projeto ainda não é portável.

Também há bons motivos para adiar. Um protótipo inicial pode alterar o modelo de dados todos os dias, e o trabalho de migração pode ser descartado com a próxima decisão de produto. Se a plataforma atual suporta o lançamento pretendido, a exportação de código-fonte, a implementação, domínios personalizados e um caminho de reversão credível, aprender com uma pequena versão lançada pode valer mais do que aperfeiçoar a infraestrutura de um produto que ninguém quer.

Por isso, a decisão antes do lançamento não é «Conseguimos mudar?». É «A mudança elimina um risco conhecido no lançamento ou estamos a pagar para preservar suposições?». Migre por causa de uma restrição concreta. Não migre apenas porque a infraestrutura convencional parece mais respeitável.

Depois da tração, a informação traz obrigações

Migrar depois de ganhar tração faz sentido quando o uso real revelou necessidades que a configuração original não consegue satisfazer, mas o plano tem de preservar todas as promessas públicas já em uso. Agora conhece os percursos mais usados, o volume real de dados, as tarefas em segundo plano que os utilizadores acionam e as integrações importantes. Essa informação pode evitar uma mudança dispendiosa para uma arquitetura imaginada.

As obrigações são igualmente concretas. As palavras-passe existentes têm de continuar a funcionar, ou os utilizadores precisam de um caminho controlado para as repor. Os identificadores da base de dados têm de se manter estáveis se forem expostos em URLs, faturas, webhooks ou chaves estrangeiras. Os ficheiros enviados precisam de um plano de transferência. As ligações de e-mail e os callbacks OAuth têm de apontar para o domínio certo. As escritas feitas durante a cópia têm de chegar à nova base de dados ou ser deliberadamente suspensas.

A tração não é um único limiar. Dez clientes ativos que usam a app para processar salários criam mais risco de migração do que dez mil leitores de um catálogo estático. Conte o estado e as consequências, não as contas. Pergunte quanto dados mudam por minuto, quanto custa uma ação duplicada, com que rapidez o apoio consegue contactar cada utilizador afetado e se a empresa consegue tolerar uma janela de manutenção.

É também nesta fase que as equipas confundem procura observada com autorização arquitetural. Mais utilizadores não justificam automaticamente uma reescrita. Se a aplicação exportada for compreensível e os serviços atuais puderem ser separados uma fronteira de cada vez, uma migração incremental é mais segura do que substituir toda a pilha.

Quero um mapa de propriedade escrito antes de aprovar uma mudança depois de ganhar tração:

  • Repositório de código-fonte e processo de compilação
  • Diretório de utilizadores e sessões ativas
  • Base de dados principal, ficheiros e cópias de segurança
  • Segredos, tarefas agendadas e webhooks de saída
  • Domínio, registos do remetente de e-mail, monitorização e autoridade de reversão

Qualquer item em branco é um bloqueio, não um detalhe para a noite da passagem. O nome da plataforma só importa quando altera a forma de exportar ou reconfigurar um destes recursos.

A autenticação é uma migração de identidade

A autenticação deve ser tratada como uma transferência de identidades e regras de confiança, não como um ecrã de início de sessão que pode ser reconstruído mais tarde. O formulário visível é a parte fácil. Hashes de palavras-passe, IDs de assunto dos fornecedores, estado de e-mail verificado, inscrição em autenticação multifator, métodos de recuperação, sessões e funções de autorização contêm a verdadeira continuidade.

Primeiro, determine se a app possui uma tabela de utilizadores ou delega a identidade num serviço gerido. Se conseguir exportar utilizadores, analise os campos disponíveis e se os hashes de palavras-passe podem ser importados para o destino. Os hashes não são intercambiáveis só porque ambos os sistemas lhes chamam hashes. O destino tem de suportar o algoritmo e os parâmetros exatos, ou todas as palavras-passe terão de ser repostas.

O início de sessão social cria outra fronteira de identidade. Normalmente, os fornecedores OAuth devolvem um identificador de assunto estável e específico do fornecedor. Se a nova implementação associar contas apenas pelo e-mail, pode unir pessoas incorretamente quando os endereços mudam ou os fornecedores devolvem aliases diferentes. Preserve a combinação de emissor, assunto do fornecedor e ID do utilizador local. Registe novamente os URLs de callback antes da passagem e teste tanto um novo início de sessão como uma conta existente.

A folha de consulta de gestão de sessões da OWASP recomenda renovar o identificador de sessão após uma alteração de privilégios. Uma migração não é, por si só, uma alteração de privilégios, mas o conselho revela uma fronteira importante: o estado de sessão é estado de segurança. Tentar serializar cookies opacos de uma pilha de autenticação para outra costuma ser uma má troca. Mantenha temporariamente o verificador antigo se o compreender por completo, ou faça expirar as sessões e informe os utilizadores de que têm de iniciar sessão outra vez. Nunca aceite silenciosamente um cookie que o novo serviço não consegue validar.

O âmbito dos cookies pode estragar uma mudança que, de resto, está correta. Verifique o nome do cookie, domínio, caminho e os atributos Secure, HttpOnly e SameSite produzidos pelo novo alojamento. A referência Set-Cookie da MDN explica que um cookie com o atributo Domain fica disponível para esse domínio e os seus subdomínios, enquanto a omissão do domínio o restringe ao host que o definiu. Essa diferença importa quando a app antiga usava um host para a interface web e outro para a API. Teste num perfil de navegador novo para que um cookie antigo não faça o novo fluxo parecer saudável.

A autorização merece uma comparação separada. Um utilizador pode autenticar-se com sucesso e, ainda assim, perder uma associação a uma organização, uma função de administrador, um direito de subscrição ou uma política ao nível da linha. Exporte uma amostra de contas com funções diferentes e escreva testes de acesso esperado antes de mover os dados. Uma página de início de sessão bem-sucedido prova quase nada.

Numa migração antes do lançamento, prefiro substituir já o sistema de identidade e eliminar os utilizadores de teste. Numa migração depois de ganhar tração, escolha uma estratégia de continuidade explícita:

  • Importe hashes de palavras-passe compatíveis e preserve os IDs dos fornecedores.
  • Mantenha o serviço de identidade antigo enquanto a aplicação muda.
  • Exija uma reposição com tokens de utilização única que expiram.
  • Execute uma ponte temporária de leitura dupla, com uma única autoridade para as escritas.

Não mantenha dois diretórios de utilizadores com escrita. Alterações de e-mail em conflito e pedidos de eliminação de contas transformarão essa conveniência num incidente.

A transferência da base de dados tem de preservar o significado

Uma migração de base de dados só tem sucesso quando o destino preserva restrições, identificadores, marcas temporais, relações e todas as escritas aceites durante a mudança. As contagens de linhas são uma verificação fraca. Duas bases de dados podem ter o mesmo número de linhas e divergir na precisão monetária, fusos horários, unicidade, tratamento de valores nulos ou chaves estrangeiras.

Antes do lançamento, reconstrua a base de dados a partir de migrações versionadas, em vez de copiar uma base de dados de desenvolvimento. Crie apenas os registos de que a aplicação precisa. Este teste prova que o histórico do esquema está completo e que a app não depende de tabelas que alguém criou manualmente numa consola alojada.

Depois de ganhar tração, separe a mudança de esquema da mudança dos dados ativos. Registe o motor e a versão de origem, extensões, intercalações, colunas geradas, gatilhos, políticas ao nível da linha, sequências e objetos grandes. Se o destino usar um motor de base de dados diferente, trate também o trabalho como uma migração da aplicação. A sintaxe SQL é a menor parte dessa alteração. O comportamento das transações e a semântica dos tipos causam as surpresas desagradáveis.

A documentação do PostgreSQL descreve pg_dump como uma exportação consistente que não bloqueia leitores nem escritores. Isso é útil, mas as equipas interpretam muitas vezes essa promessa em excesso. Um snapshot consistente não inclui escritas confirmadas depois de o snapshot começar. Continua a precisar de um método de captura de alterações, de uma pausa final nas escritas ou de uma janela de manutenção para fechar essa lacuna.

Use uma consulta de reconciliação cuja saída possa ser guardada no registo da passagem. Este fragmento verifica contagens, limites dos identificadores e janelas de atualização de três tabelas importantes:

SELECT 'users' AS table_name, count(*) AS rows,
       min(id)::text AS min_id, max(id)::text AS max_id,
       max(updated_at) AS newest_update
FROM users
UNION ALL
SELECT 'projects', count(*), min(id)::text, max(id)::text, max(updated_at)
FROM projects
UNION ALL
SELECT 'orders', count(*), min(id)::text, max(id)::text, max(updated_at)
FROM orders;

Execute-a nos dois lados e investigue todas as diferenças. Depois, teste invariantes de domínio que as contagens não conseguem ver: nenhuma encomenda aponta para um utilizador em falta, os saldos correspondem ao respetivo livro-razão, todos os registos de ficheiros têm um objeto e as regras de unicidade rejeitam os mesmos duplicados.

As cópias de segurança precisam de um teste de restauro. Um ficheiro de exportação bem-sucedido só prova que um comando terminou. Restaure-o num destino vazio, execute a aplicação com ele e cronometre o processo. Esse tempo de restauro medido indica se reverter através de restauro é realista ou apenas reconfortante.

O armazenamento de ficheiros fica muitas vezes escondido atrás de linhas da base de dados. Uma tabela uploads exportada pode preservar nomes de objetos enquanto os objetos reais permanecem num bucket gerido pela plataforma. Copie os bytes, somas de verificação, tipos de conteúdo, regras de acesso e metadados de propriedade, depois experimente transferências através da aplicação, e não da consola de armazenamento. Se os URLs incluírem tokens assinados ou o nome do host antigo, gere-os novamente em vez de copiar URLs desatualizados. Trate os ficheiros enviados pelos utilizadores como estado na mesma janela de passagem, sobretudo quando os utilizadores podem substituir um ficheiro enquanto a cópia da base de dados decorre.

As variáveis de ambiente revelam arquitetura escondida

Altere uma fronteira de cada vez
O modo de planeamento e os snapshots ajudam a dividir uma migração em alterações menores na aplicação, com pontos de recuperação.

As variáveis de ambiente devem passar de um conjunto herdado de cadeias de texto para um contrato identificado em cada ambiente. As variáveis em falta causam falhas óbvias. Mais perigosas são as variáveis que contêm valores de produção plausíveis, mas errados, como uma chave de pagamento de teste, um segredo de webhook antigo ou uma origem de callback que envia os utilizadores de volta para o host anterior.

Inventarie as variáveis a partir do código, definições da plataforma, configuração de compilação, funções sem servidor, tarefas agendadas e sistema de implementação. Não copie todo o ambiente antigo para o novo alojamento. Classifique cada valor pelo proprietário, sensibilidade, âmbito, método de rotação e se é lido durante a compilação ou em tempo de execução.

Um manifesto compacto torna esta fronteira verificável:

DATABASE_URL          runtime   secret   owner=backend   rotate=yes
PUBLIC_APP_ORIGIN     build     public   owner=web       rotate=no
SESSION_SIGNING_KEY   runtime   secret   owner=security  rotate=yes
MAIL_SENDER           runtime   public   owner=ops       rotate=no
WEBHOOK_SECRET        runtime   secret   owner=backend   rotate=yes

A diferença entre compilação e execução importa em front ends ao estilo de React. Um valor incorporado durante a compilação não muda quando alguém edita uma definição de tempo de execução. Recompile o cliente e inspecione o bundle entregue para verificar a configuração pública. Nunca coloque um segredo numa variável só porque o nome começa pelo prefixo público de um framework.

Rode os segredos durante uma migração depois de ganhar tração quando o destino suportar um período de sobreposição. Para verificação de webhooks ou assinatura de sessões, aceite brevemente o segredo antigo e o novo, emitindo apenas o novo. Remova o valor antigo depois da janela máxima de entrega ou sessão. Se um fornecedor suportar apenas um segredo, coordene a mudança com a passagem final e deixe essa dependência explícita no manual de execução.

Antes do lançamento, elimine variáveis não utilizadas e faça o arranque falhar quando faltarem valores obrigatórios. Depois de ganhar tração, adicione observabilidade antes da limpeza para conseguir ver se uma integração aparentemente obsoleta continua a receber chamadas. Adivinhar pelos nomes das variáveis é a forma de as equipas desativarem a discreta tarefa mensal de que as finanças realmente precisam.

Compare valores por ambiente, mas nunca cole segredos no documento de migração. Registe nomes de segredos e etiquetas de versão, mantendo os valores no armazenamento de segredos do destino. Dê à identidade da aplicação permissão para ler apenas o que essa implementação precisa. Quando uma variável mudar, registe quem a alterou e que versão a consumiu. Esta pequena disciplina responde à conhecida pergunta da noite da passagem: «Que URL de base de dados implementámos, afinal?»

A passagem do domínio é uma alteração de controlo de tráfego

Uma passagem de domínio deve ser pensada para que as implementações antiga e nova possam receber tráfego em segurança durante a propagação de DNS. O DNS não muda em todo o lado ao mesmo tempo, e reduzir o tempo de vida pouco antes da alteração não afeta os resolvedores que já guardaram em cache o valor anterior.

Vários dias antes de uma mudança planeada, reduza o TTL do registo relevante e confirme a resposta autoritativa. Mantenha a implementação antiga saudável pelo menos durante o TTL anterior, mais uma margem conservadora para os resolvedores. Prepare o certificado no novo alojamento antes de encaminhar tráfego para lá e verifique separadamente o domínio de topo, o host www, o subdomínio da API, os redirecionamentos e os registos IPv6.

O domínio é apenas a porta de entrada. Atualize callbacks de autenticação, origens permitidas, domínios de cookies, URLs canónicos, endpoints de webhooks, ligações de e-mail e qualquer configuração de deep links móveis. Procure o nome de host antigo no repositório e nas definições da plataforma. Um redirecionamento ajuda os navegadores, mas não corrige uma incompatibilidade rígida de callback OAuth nem um webhook assinado para o endpoint errado.

Só é possível não haver indisponibilidade se ambas as versões conseguirem operar com estado compatível. Se a nova versão alterar a base de dados de forma que o código antigo não consiga ler, a sobreposição de DNS cria falhas. Use alterações de esquema de expansão e contração: primeiro adicione a nova coluna ou tabela, implemente código que compreenda ambos os formatos, mova os dados e só depois remova o formato antigo, quando todo o tráfego tiver saído da versão antiga.

Para produtos com pouco volume, uma janela de manutenção curta pode ser mais segura do que uma configuração de replicação em direto complexa. Diga quando as escritas serão suspensas, devolva uma resposta de manutenção adequada, esvazie o trabalho em segundo plano, faça a cópia final, reconcilie, mude o tráfego e reabra as escritas. O acesso só de leitura pode continuar disponível se não conseguir colocar trabalho oculto em fila.

A reversão precisa de uma regra para os dados. Apontar o DNS de volta é fácil quando nenhuma escrita chegou ao destino. Assim que os utilizadores tiverem escrito nos dois lados, inverter o DNS pode descartar ou dividir dados. Defina o último momento seguro para reverter e, depois desse momento, avance ou reconcilie alterações, em vez de fingir que inverter o tráfego restaura a consistência.

Observe a aplicação a partir de fora da nova conta de alojamento. Resolva o domínio através de mais de um resolvedor público, peça a cadeia de certificados, carregue uma página sem cache aquecida, submeta uma transação reversível e confirme que o trabalho em segundo plano resultante termina. Os painéis do alojamento podem indicar uma implementação saudável enquanto os utilizadores recebem uma resposta DNS antiga ou uma edge regional devolve uma compilação mais antiga. Mantenha uma verificação sintética em execução tanto no domínio público como num host de teste específico do destino até a sobreposição terminar.

A limpeza do código-fonte determina se a mudança dura

Escolha onde a app é executada
Execute aplicações Koder.ai no país exigido pelas suas restrições de transferência de dados e privacidade.

A limpeza do código-fonte deve remover o acoplamento à plataforma sem apagar estruturas geradas úteis nem desencadear uma reescrita sem relação com a migração. O código gerado pode ser repetitivo ou pouco elegante, mas o desagrado estético não é um requisito de migração. Altere o que impede compilações independentes, testes, revisão de segurança ou manutenção futura.

Comece pela proveniência. Exporte o repositório completo e mantenha ficheiros de licença, atribuições de recursos, migrações geradas, ficheiros de bloqueio e configuração. Verifique se segredos ou tokens da plataforma entraram no histórico Git. Removê-los do ficheiro mais recente não os revoga, por isso rode as credenciais expostas e decida se é justificado reescrever o histórico.

Em seguida, encontre importações específicas da plataforma, caminhos de proxy, clientes de base de dados, auxiliares de autenticação, adaptadores de armazenamento, ficheiros de implementação e endpoints de API gerados. Quando for prático, substitua-os por interfaces estreitas da aplicação. Uma pesquisa em todo o repositório ajuda, mas executar os percursos dos utilizadores mostra-lhe quais referências continuam a importar.

A limpeza de dependências vem depois de a compilação independente funcionar. Remova pacotes um de cada vez, volte a gerar o ficheiro de bloqueio com o gestor de pacotes atual e execute os testes após cada grupo. Não atualize o framework, substitua a gestão de estado, mude o nome de todos os componentes e migre o alojamento na mesma alteração. Isso cria explicações a mais para uma só falha.

O código de servidor gerado merece atenção extra nas fronteiras de confiança. Siga cada pedido desde a rota até à verificação de autorização e à consulta da base de dados, e confirme que o servidor não depende de uma regra de visibilidade no lado do cliente. Reveja limites de carregamento, destinos de pedidos de saída, mensagens de erro e rotas administrativas. Isto não é um pedido para reescrever todos os controladores gerados. É uma verificação focada para garantir que o código continua a aplicar regras de acesso depois de desaparecerem o middleware da plataforma e os proxies geridos.

O projeto gerado também precisa dos ficheiros operacionais habituais: um manifesto de ambiente de exemplo com valores falsos, comandos de migração da base de dados, instruções de compilação e arranque, verificações de integridade e uma descrição dos workers em segundo plano. Mantenha estas instruções executáveis. Um README que diz «configure a base de dados» regista apenas que existe uma base de dados.

A limpeza antes do lançamento pode incluir reposições de esquema e grandes refatorações porque não existe uma promessa de compatibilidade. A limpeza depois de ganhar tração deve preservar formatos de API públicos, identificadores e comportamento visível para o utilizador até a mudança de infraestrutura estabilizar. Dê à nova implementação um período tranquilo antes de alterar o comportamento do produto. Quando a migração e a reformulação chegam juntas, o apoio não consegue saber se uma queixa vem da mudança ou da funcionalidade nova.

O ensaio transforma a indisponibilidade numa decisão

Torne a passagem reversível
Os snapshots e a reversão dão aos projetos Koder.ai um ponto de recuperação enquanto altera o alojamento ou a configuração.

Um ensaio de migração deve reproduzir a sequência de produção com uma cópia recente de dados anonimizados e produzir tempos medidos, saída de reconciliação e um ponto de interrupção testado. Uma lista de verificação copiada de outro projeto não consegue dizer-lhe quanto tempo a sua base de dados demora a restaurar nem que tarefa continua a escrever depois de começar o modo de manutenção.

Use um operador para executar e outro para observar, registar tempos e questionar verificações ignoradas. Numa equipa pequena, a segunda pessoa pode ser o fundador, mas precisa de contexto suficiente para reconhecer um resultado alterado. A pessoa que introduz os comandos não deve ser também a única pessoa a decidir se esses comandos funcionaram.

Um manual de execução prático segue uma ordem rigorosa:

  1. Suspenda implementações sem relação e registe as versões atuais, os valores de DNS e as versões dos segredos.
  2. Coloque as escritas em modo de manutenção, esvazie filas, pare tarefas agendadas e registe a marca de água final da origem.
  3. Copie os dados restantes, reconcilie tabelas e invariantes de domínio e execute testes de autenticação e do percurso principal.
  4. Mude o tráfego, verifique certificados e callbacks, observe erros e profundidade das filas, depois reabra as escritas.
  5. No ponto de controlo declarado, continue no novo sistema ou execute a regra de dados de reversão documentada.

Antes do lançamento, ensaie destruindo o destino e reconstruindo-o a partir do repositório. O objetivo é a reprodutibilidade, por isso uma base de dados vazia e um ambiente novo revelam mais do que uma cópia parecida com produção.

Depois de ganhar tração, ensaie a escala e a concorrência. Copie dados representativos suficientes para revelar índices lentos e migrações demoradas. Reproduza tráfego de leitura seguro, se o tiver, crie escritas sintéticas com identificadores conhecidos e confirme que as tarefas em segundo plano são idempotentes antes de permitir novas tentativas. Uma tarefa de e-mail que envia duas vezes não é inofensiva só porque a base de dados se manteve consistente.

Meça a pausa nas escritas separadamente de toda a janela de manutenção. Muitas vezes, pode fazer a cópia em massa enquanto a origem continua ativa e suspender apenas para o delta e a validação. Se o ensaio mostrar que o delta não termina dentro da janela permitida, adicione replicação ou captura de alterações. Não descubra essa necessidade com clientes à espera.

Guarde provas depois da mudança: versões de origem e destino, marcas temporais, verificações de linhas, resultados de testes de fumo, respostas DNS, decisões dos operadores e a hora a que os serviços antigos foram desativados. Esse registo acelera a depuração e impede que o próximo plano de migração dependa da memória de alguém.

Escolha a fase pela reversibilidade

A melhor fase para migrar é aquela em que a falha que consegue causar de forma realista ainda é reversível. Antes do lançamento, o produto tem pouca informação, mas liberdade quase ilimitada. Depois de ganhar tração, o produto tem informação, mas transporta estado que tem de se manter coerente durante toda a mudança.

Uso seis testes de decisão:

  • Migre antes do lançamento se uma restrição conhecida de conformidade, propriedade, exportação, alojamento ou arquitetura bloquear a versão pretendida.
  • Fique e lance se a plataforma satisfizer as necessidades atuais e a equipa só migraria por ansiedade.
  • Migre depois de ganhar tração se o uso medido revelar uma restrição e conseguir ensaiar a continuidade de identidade, dados e tráfego.
  • Adie se não conseguir exportar uma base de dados restaurável, controlar o domínio, enumerar os segredos ou definir a propriedade das escritas.
  • Prefira uma separação incremental quando a autenticação ou os dados puderem permanecer temporariamente enquanto a computação e o alojamento mudam.

Lovable, Bolt, v0 e Replit podem todos produzir projetos cuja portabilidade depende dos serviços exatos escolhidos, do plano em uso e do código gerado nesse momento. Inspecione o repositório real e os controlos da conta. A categoria de fornecedor não responde se os hashes de palavras-passe, extensões da base de dados, ficheiros ou definições de implementação específicos do seu caso podem mudar.

Se escolher um novo ambiente de desenvolvimento baseado em chat, os controlos de planeamento e reversão reduzem o custo de separar a mudança em alterações verificáveis. O Koder.ai suporta exportação de código-fonte, implementação e alojamento, domínios personalizados, snapshots e reversão, para que uma equipa possa manter essas verificações de propriedade dentro do plano de migração sem fazer o conselho deste artigo depender de uma única plataforma.

Defina um orçamento de migração antes do lançamento, mesmo que decida ficar. Mantenha o código-fonte sob o seu controlo, versione o esquema, documente o contrato do ambiente e ensaie um restauro. Estas ações custam muito menos enquanto a app é pequena e preservam a opção de mudar quando a tração trouxer um motivo, em vez de uma crise.

Se a equipa não consegue fazer esse restauro hoje, a portabilidade continua a ser uma intenção, não uma propriedade da aplicação.

Perguntas frequentes

Devo migrar a minha app gerada antes de a lançar?

Migre antes do lançamento quando a configuração atual não cumpre um requisito conhecido de propriedade, alojamento, localização dos dados ou manutenção. Se a plataforma cumpre os requisitos de lançamento e o produto ainda muda todos os dias, lançar uma versão limitada pode ensinar-lhe mais do que antecipar a mudança de infraestrutura.

É arriscado migrar uma app depois de já ter utilizadores?

Sim, porque as identidades dos utilizadores, escritas, ficheiros, callbacks e trabalho agendado têm de se manter consistentes durante a mudança. O risco torna-se controlável quando ensaia com dados representativos, define uma única autoridade para as escritas e documenta o último ponto de reversão seguro.

Posso mover hashes de palavras-passe para um novo fornecedor de autenticação?

Só se o destino aceitar o algoritmo e os parâmetros exatos de hash usados na origem. Caso contrário, mantenha temporariamente o serviço de identidade antigo ou faça uma reposição controlada de palavras-passe. Nunca converta hashes como se fossem palavras-passe encriptadas simples.

Os utilizadores terão de iniciar sessão novamente após a migração?

Muitas vezes, sim, sobretudo quando a nova pilha de autenticação não consegue validar os cookies de sessão antigos em segurança. Um pedido claro para iniciar sessão é preferível a uma camada de compatibilidade frágil que aceita um estado de sessão que ninguém consegue validar por completo.

Como migro uma base de dados em produção sem perder escritas?

Use replicação ou captura de alterações, ou suspenda as escritas para copiar e reconciliar o delta final. Um snapshot consistente cobre apenas um momento, por isso continua a ser necessário tratar os commits recebidos depois de o snapshot começar.

Quanto tempo deve durar a indisponibilidade da migração?

O ensaio deve determiná-lo. Meça separadamente o esvaziamento das filas, o delta final dos dados, a validação, a mudança de DNS e os testes de fumo, depois anuncie uma janela com margem suficiente para a execução medida mais lenta.

Quando devo reduzir o TTL do DNS antes de uma passagem?

Baixe-o vários dias antes e confirme a resposta DNS autoritativa, pois os resolvedores podem manter o valor anterior até expirar o TTL antigo. Mantenha a implementação anterior saudável durante a sobreposição, em vez de esperar uma mudança global instantânea.

Devo refatorizar o código gerado durante a migração?

Altere o código que impede uma compilação independente, testes, revisão de segurança ou operação. Deixe as grandes atualizações de frameworks e reescritas estéticas para mais tarde, porque combiná-las com a mudança de infraestrutura torna as falhas mais difíceis de isolar.

Posso reverter apontando o domínio para o alojamento antigo?

Apenas antes de o destino aceitar escritas, ou quando tiver uma forma testada de reproduzir essas escritas na origem. Assim que as duas bases de dados divergirem, alterar apenas o DNS pode perder dados e não é uma reversão completa.

O que tenho de exportar do Lovable, Bolt, v0 ou Replit?

Exporte todo o código-fonte e identifique a base de dados, os utilizadores, os ficheiros, os segredos, as tarefas, as definições de domínio e a configuração de implementação que vivem fora dele. Os controlos exatos variam conforme o projeto e o plano, por isso confirme os recursos na sua própria conta em vez de confiar numa comparação genérica de plataformas.

Related posts