A diferença entre rake db:migrate
e rake db:reset
é bem clara na minha cabeça. O que eu não entendo é o quão rake db:schema:load
diferente dos dois primeiros.
Só para ter certeza de que estou na mesma página:
rake db:migrate
- Executa as migrações que ainda não foram executadas.rake db:reset
- Limpa o banco de dados (presumivelmente faz umrake db:drop
+rake db:create
+rake db:migrate
) e executa a migração em um novo banco de dados.
Por favor, ajude a esclarecer, se meu entendimento deu errado.
ruby-on-rails
ruby
database
rake
Gaurav Agarwal
fonte
fonte
rake --tasks
ajuda?rake db:migrate
está correta, mas sua compreensãorake db:reset
está errada. Veja a resposta mais alta, de moritz.rails db:migrate
,rails db:reset
,rails db:schema:load
. Veja stackoverflow.com/questions/38403533/…Respostas:
db: schema: load cria tabelas e colunas no banco de dados (existente) após schema.rb
db: setup db: create, db: schema: load, db: seed
Normalmente, você usaria o db: migrate após fazer alterações no esquema por meio de novos arquivos de migração (isso faz sentido apenas se já houver dados no banco de dados). db: schema: load é usado quando você configura uma nova instância do seu aplicativo.
Espero que ajude.
UPDATE para trilhos 3.2.12:
Acabei de verificar a fonte e as dependências são assim agora:
db: schema: dump despeja o esquema do ambiente atual (e parece criar o db também)
db: setup é executado db: schema: load, db: seed
Para obter mais informações, consulte https://github.com/rails/rails/blob/v3.2.12/activerecord/lib/active_record/railties/databases.rake (para Rails 3.2.x) e https: // github .com / rails / rails / blob / v4.0.5 / activerecord / lib / active_record / railties / database.rake (para Rails 4.0.x)
fonte
db:create
se necessário. Pelo menos a partir dos trilhos 4.0.2.rake db:migrate
ao chamarrake db:setup
se houver migrações pendentes, mas não será executado.TLDR
Usar
rake db:migrate
Se você quiser fazer alterações no esquemarake db:reset
Se você deseja descartar o banco de dados, recarregue o esquema deschema.rb
e repita o banco de dadosrake db:schema:load
Se você deseja redefinir o banco de dados para o esquema, conforme fornecido emschema.rb
(Isso excluirá todos os dados)Explicações
rake db:schema:load
irá configurar o esquema conforme fornecido noschema.rb
arquivo. Isso é útil para uma nova instalação do aplicativo, pois não leva tanto tempo quantodb:migrate
rake db:migrate
faz alterações no esquema existente. É como criar versões do esquema.db:migrate
procurarádb/migrate/
por arquivos ruby e executará as migrações que ainda não foram executadas, começando pela mais antiga. O Rails sabe qual arquivo é o mais antigo, observando o registro de data e hora no início do nome do arquivo de migração.db:migrate
vem com o benefício de que os dados também podem ser colocados no banco de dados. Na verdade, isso não é uma boa prática. É melhor usarrake db:seed
para adicionar dados.rake db:migrate
fornece tarefas para cima , para baixo , etc., que permitem comandos comorake db:rollback
e o tornam o comando mais útil.rake db:reset
faz umdb:drop
edb:setup
Ele deixa o banco de dados, criá-la novamente, carrega o esquema, e inicializa com os dados de sementes
Parte relevante dos comandos do database.rake
fonte
Tanto quanto eu entendo, ele vai soltar seu banco de dados e recriá-lo com base em seu
db/schema.rb
arquivo. É por isso que você precisa garantir que seuschema.rb
arquivo esteja sempre atualizado e sob controle de versão.fonte
Você pode simplesmente olhar nas tarefas do Active Record Rake, pois é onde acredito que elas moram como neste arquivo. https://github.com/rails/rails/blob/fe1f4b2ad56f010a4e9b93d547d63a15953d9dc2/activerecord/lib/active_record/tasks/database_tasks.rb
O que eles fazem é a sua pergunta, certo?
Isso depende de onde eles vêm e este é apenas um exemplo para mostrar que eles variam dependendo da tarefa. Aqui temos um arquivo diferente, cheio de tarefas.
https://github.com/rails/rails/blob/fe1f4b2ad56f010a4e9b93d547d63a15953d9dc2/activerecord/Rakefile
que tem essas tarefas.
Isso pode não responder à sua pergunta, mas pode lhe dar algumas dicas sobre como prosseguir e analisar a fonte, especialmente os arquivos e tarefas de rake. Como eles fazem um bom trabalho em ajudá-lo a usar os trilhos, eles nem sempre documentam bem o código. Todos nós poderíamos ajudar lá, se soubermos o que deve fazer.
fonte
ATUALIZADO para Rails 5:
db:create
- Cria o banco de dados para o ambiente RAILS_ENV atual . Se RAILS_ENV não for especificado, o padrão será o banco de dados de desenvolvimento e teste.db:create:all
- Cria o banco de dados para todos os ambientes.db:drop
- Elimina o banco de dados para o ambiente RAILS_ENV atual . Se RAILS_ENV não for especificado, o padrão será o banco de dados de desenvolvimento e teste.db:drop:all
- Elimina o banco de dados para todos os ambientes.db:migrate
- Executa migrações para o ambiente atual que ainda não foi executado. Por padrão, ele executará migrações apenas no ambiente de desenvolvimento.db:migrate:redo
- Executa db: migrate: down e db: migrate: up ou db: migrate: rollback e db: migrate: up, dependendo da migração especificada.db:migrate:up
- Executa a VERSÃO de migração fornecida.db:migrate:down
- Executa o down para a VERSÃO de migração especificada.db:migrate:status
- Exibe o status atual da migração.db:migrate:rollback
- Reverte a última migração.db:version
- Imprime a versão atual do esquema.db:forward
- Envia o esquema para a próxima versão.db:seed
- Executa o arquivo db / seeds.rb .db:schema:load
Recria o banco de dados do arquivo schema.rb .db:schema:dump
Despeja o esquema do ambiente atual em db / schema.rb .db:structure:load
- Recria o banco de dados do arquivo structure.sql .db:structure:dump
- Despeja o esquema do ambiente atual em db / structure.sql . (Você pode especificar outro arquivo comSCHEMA=db/my_structure.sql
)db:setup
Executa db: create , db: schema: load e db: seed .db:reset
Executa db: drop e db: setup .db:migrate:reset
- Executa db: drop , db: create e db: migrate .db:test:prepare
- Verifique as migrações pendentes e carregue o esquema de teste. (Se você executar o rake sem argumentos, isso será feito por padrão.)db:test:clone
- Recrie o banco de dados de teste a partir do esquema de banco de dados do ambiente atual.db:test:clone_structure
- Semelhante ao db: test: clone , mas garantirá que o banco de dados de teste tenha a mesma estrutura, incluindo conjuntos de caracteres e agrupamentos, que o banco de dados do ambiente atual.db:environment:set
- Defina o ambiente RAILS_ENV atual na tabela ar_internal_metadata . (Usado como parte da verificação do ambiente protegido.)db:check_protected_environments
- Verifica se uma ação destrutiva pode ser executada no ambiente RAILS_ENV atual . Usado internamente ao executar uma ação destrutiva, como db: drop ou db: schema: load .fonte