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 um rake db:drop + rake db:create + rake db:migrate) e faz a migração numa base de Dados Nova.
Por favor, ajude-me a esclarecer, se o meu entendimento desapareceu. errado.

Author: ekremkaraca, 2012-04-24

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)

 1149
Author: moritz, 2015-11-27 14:27:48

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 de schema.rb, e reinicia a base de Dados
  • rake db:schema:load Se quiser repor a base de dados no esquema indicado em schema.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
 16
Author: sudo bangbang, 2016-09-14 00:09:49
Tanto quanto sei, vai largar a sua base de dados e recriá-la com base no seu ficheiro. É por isso que você precisa se certificar de que seu arquivo schema.rb está sempre atualizado e sob controle de versão.
 2
Author: Simon Bagreev, 2012-04-24 16:25:21
{[[2]}você poderia simplesmente olhar nas tarefas Rake registro ativo como que é onde eu acredito que eles vivem como neste arquivo. https://github.com/rails/rails/blob/fe1f4b2ad56f010a4e9b93d547d63a15953d9dc2/activerecord/lib/active_record/tasks/database_tasks.rb O que eles fazem é a tua pergunta, certo? Isso depende de onde eles vêm e este é um exemplo justo para mostrar que eles variam dependendo da tarefa. Aqui temos um arquivo diferente cheio de tarefa.

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.

 0
Author: Douglas G. Allen, 2016-12-04 22:24:09