Diferença entre rake db: migrar db: reset e db: schema: carga
a diferença entre rake db:migrate
e rake db:reset
é bastante clara na minha cabeça. A coisa que eu não entendo é como rake db:schema:load
diferente dos dois anteriores.
só para ter a certeza que estou na mesma página:
- - Faz as migrações que ainda não foram feitas.
-
rake db:reset
- limpa a base de dados (presumivelmente faz umrake db:drop
+rake db:create
+rake db:migrate
) e faz a migração numa base de Dados Nova.
4 answers
- db: migrar corridas (únicas) migrações que ainda não decorreram.
- db: create cria a base de dados
- db: drop apaga a base de dados
Db:esquema: load cria tabelas e colunas dentro da base de dados (existente) que segue o esquema.rb
Db: setup does db: create, db: schema: load, db: seed
- db: reset faz db: drop, db: setup
Normalmente, usarias db: migrar após ter feito alterações ao esquema através de novos arquivos de migração (isso só faz sentido se já houver dados na base de dados). db: schema: a carga é usada quando configura uma nova instância da sua aplicação.
Espero que isso ajude.Actualização dos carris 3.2.12:
Acabei de verificar a fonte e as dependências são assim agora:
- db: create cria a base de dados para a env actual
- db: criar: tudo cria a bases de dados para todas as env
- db: drop larga a base de dados para a env actual
- db: drop: all drops the databases for all envs
- db: migrar executa migrações para a env actual que ainda não foram executadas
- db: migrar: up executa uma migração específica
- db: migrar: para baixo rola para trás uma migração específica
- db: migrar: estado mostra o estado de migração actual
- db: retrocesso última migração
- db: forward avança a versão actual do esquema para a seguinte
- db: o seed (apenas) executa o db/seed.ficheiro RB
- db: esquema: carregar carrega o esquema na base de dados actual da env
Db: schema: dump descarrega o esquema actual da env (e parece criar o db também)
Db: setup executa db: schema: carga, db: seed
- db: reset executa db: drop db: setup
- db: migrar: refazer runs (db:migrar:down db:migrar:up) ou (db:rollback db:migrar) dependendo da migração indicada
- db: migrate: reset runs db: drop db: create db: migrate
Para mais informações, por favor, dê uma vista de olhos https://github.com/rails/rails/blob/v3.2.12/activerecord/lib/active_record/railties/databases.rake{[116](para Carris 3.2.x) e https://github.com/rails/rails/blob/v4.0.5/activerecord/lib/active_record/railties/databases.rake{[116](para Carris 4.0.x)
TLDR
Utilizar
-
rake db:migrate
Se quiseres fazer alterações ao esquema -
rake db:reset
Se quiseres largar a base de dados, recarrega o esquema deschema.rb
, e reinicia a base de Dados -
rake db:schema:load
Se quiser repor a base de dados no esquema indicado emschema.rb
(Isto irá apagar todos os dados)
Explicações
rake db:schema:load
irá configurar o esquema conforme indicado no ficheiro schema.rb
. Isto é útil para uma nova instalação de app como ele não leva tanto tempo como db:migrate
Nota importante,
db:schema:load
irá apagar dados no servidor.
rake db:migrate
altera o esquema existente. É como criar versões do esquema. db:migrate
irá procurar em db/migrate/
quaisquer ficheiros em ruby e executar as migrações que ainda não estão a correr a começar pelo mais antigo. Rails sabe que Arquivo é o mais antigo, olhando para o timestamp no início do nome de arquivo de migração. {[10] } vem com um benefício que os dados também podem ser colocados na base de dados. Na verdade, isto não é uma boa prática. É melhor usar rake db:seed
para adicionar dados.
rake db:migrate
fornece tarefas , down etc, que activa comandos como rake db:rollback
e torna-o o comando mais útil.
rake db:reset
o a db:drop
e db:setup
Ele deixa cair o banco de dados, cria-o novamente, carrega o esquema, e inicializa com os dados do seed
Parte relevante dos comandos das bases de dados .rake
namespace :schema do
desc 'Creates a db/schema.rb file that is portable against any DB supported by Active Record'
task :dump => [:environment, :load_config] do
require 'active_record/schema_dumper'
filename = ENV['SCHEMA'] || File.join(ActiveRecord::Tasks::DatabaseTasks.db_dir, 'schema.rb')
File.open(filename, "w:utf-8") do |file|
ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, file)
end
db_namespace['schema:dump'].reenable
end
desc 'Loads a schema.rb file into the database'
task :load => [:environment, :load_config, :check_protected_environments] do
ActiveRecord::Tasks::DatabaseTasks.load_schema_current(:ruby, ENV['SCHEMA'])
end
# desc 'Drops and recreates the database from db/schema.rb for the current environment and loads the seeds.'
task :reset => [ 'db:drop', 'db:setup' ]
namespace :migrate do
# desc 'Rollbacks the database one migration and re migrate up (options: STEP=x, VERSION=x).'
task :redo => [:environment, :load_config] do
if ENV['VERSION']
db_namespace['migrate:down'].invoke
db_namespace['migrate:up'].invoke
else
db_namespace['rollback'].invoke
db_namespace['migrate'].invoke
end
end
schema.rb
está sempre atualizado e sob controle de versão.
Https://github.com/rails/rails/blob/fe1f4b2ad56f010a4e9b93d547d63a15953d9dc2/activerecord/Rakefile
Que tem estas tarefas.
namespace :db do
task create: ["db:mysql:build", "db:postgresql:build"]
task drop: ["db:mysql:drop", "db:postgresql:drop"]
end
Isto pode não responder à sua pergunta, mas pode dar-lhe alguma visão sobre a ir em frente e olhar a fonte, especialmente os arquivos rake e tarefas. Como eles fazem um bom trabalho de ajudá-lo a usar trilhos, eles nem sempre documentam o código tão bem. Todos podemos ajudar lá, se soubermos o que é suposto fazer.