Pergunta muito simples aqui - se as migrações podem ficar lentas e complicadas, pois um aplicativo fica mais complexo e se temos muito mais limpo rake db:schema:load
para ligar, por que as migrações existem?
Se a resposta para o exposto acima é que as migrações são usadas para controle de versão (um registro gradual de alterações no banco de dados), então, quando um aplicativo se torna mais complexo e rake db:schema:load
mais usado, eles continuam mantendo sua função principal?
Cuidado:
Das respostas a esta pergunta: rake db:schema:load
excluirá os dados em um servidor de produção, portanto, tenha cuidado ao usá-los.
ruby-on-rails
ruby-on-rails-3
migration
sscirrus
fonte
fonte
Respostas:
As migrações fornecem mudanças de passo para frente e para trás no banco de dados. Em um ambiente de produção, mudanças incrementais devem ser feitas no banco de dados durante as implantações: as migrações fornecem essa funcionalidade com uma reversão à prova de falhas. Se você correr
rake db:schema:load
em um servidor de produção, acabará excluindo todos os seus dados de produção. Este é um hábito perigoso de se entrar.Dito isto, acredito que é uma prática decente ocasionalmente "colapsar" migrações. Isso implica excluir migrações antigas, substituí-las por uma única migração (muito semelhante ao seu
schema.rb
arquivo) e atualizar aschema_migrations
tabela para refletir essa alteração. Tenha muito cuidado ao fazer isso! Você pode excluir facilmente seus dados de produção se não for cuidadoso.Como observação lateral, acredito firmemente que você nunca deve colocar a criação de dados nos arquivos de migração. O
seed.rb
arquivo pode ser usado para isso, ou tarefas personalizadas de rake ou deploy. Colocar isso nos arquivos de migração combina a especificação do esquema do banco de dados com a especificação dos dados e pode levar a conflitos ao executar os arquivos de migração.fonte
db:schema:load
se tentarem executardb:migrate
uma nova instalação. @ clear_migrationsApenas tropecei neste post, que foi há muito tempo e não vi a resposta que eu estava esperando.
rake db:schema:load
é ótimo pela primeira vez em que você coloca um sistema em produção. Depois disso, você deve executar as migrações normalmente.Isso também ajuda a limpar suas migrações sempre que você quiser, pois o esquema possui todas as informações para colocar outras máquinas em produção, mesmo quando você limpou suas migrações.
fonte
db:schema:load
tem além de diminuir alguns segundos uma vez durante o ciclo de desenvolvimento. Você já trabalhou com um aplicativo que levou mais de 30 segundos para ser construído? Atualmente, estou trabalhando em um aplicativo que possui bugs em seus arquivos de migração e nunca será migrado sem ter correções ou execuçãodb:schema:load
que me faz pensar no esquema: a carga é para quando algo dá errado no desenvolvimento do aplicativo.instead of editing schema.rb, please use the migrations feature
. Portanto, se você estiver executandodb:schema:load
em um arquivo gerado automaticamente e não tiver mais migrações para gerar automaticamente novamente, estará efetivamente seguindo o caminho de "editar" manualmente o esquema e desativar as migrações. Eu gostaria de ter uma citação do guia rails sobre isso, mas eles não discutem o schema: load, o que aumenta assustadoramente minha frustração ao decidir como abordar o recurso schema: load. = /rake db:schema:load
o contráriorake db:migrate
. Então a partir daí, você poderake db:migrate
.Migrações também permite adicionar dados ao banco de dados. mas db: schema: load apenas carrega o esquema.
fonte
Porque as migrações podem ser revertidas e fornecem funcionalidade adicional. Por exemplo, se você precisar modificar alguns dados como parte de uma alteração de esquema, será necessário fazer isso como uma migração.
fonte
Como usuário de outros ORMs, sempre me pareceu estranho o Rails não ter um recurso de 'sincronização e atualização'. ou seja, usando o arquivo de esquema (que representa todo o esquema atualizado), passe pela estrutura existente do banco de dados e adicione / remova tabelas, colunas e índices conforme necessário.
Para mim, isso seria muito mais robusto, mesmo que possivelmente um pouco mais lento.
fonte
schema
é o mestre, não as migrações.Eu já publiquei como comentário, mas acha melhor colocar os comentários do arquivo db / schema.rb aqui:
Na verdade, minha experiência é que é melhor colocar os arquivos de migração no git e não no arquivo schema.rb ...
fonte
rake db:migrate
configure as tabelas no banco de dados. Quando você executa o comando de migração, ele procura no db / migrate / os arquivos ruby e os executa começando pelo mais antigo. Há um registro de data e hora no início de cada nome de arquivo de migração.Ao contrário do
rake db:migrate
que executa migrações que ainda não foram executadas,rake db:schema:load
carrega o esquema já gerado nodb/schema.rb
banco de dados.Você pode descobrir mais sobre os comandos do banco de dados rake aqui .
fonte