676 votes

Différence entre rake db:migrate db:reset et db:schema:load

La différence entre rake db:migrate y rake db:reset est assez clair pour moi. La chose que je ne comprends pas est comment rake db:schema:load est différent des deux précédents.

Juste pour être sûr que je suis sur la même longueur d'onde :

  • rake db:migrate - Exécute les migrations qui n'ont pas encore été exécutées.
  • rake db:reset - Efface la base de données (vraisemblablement en faisant un rake db:drop + rake db:create + rake db:migrate ) et exécute la migration sur une base de données fraîche.

10 votes

Fait rake --tasks Aide ?

0 votes

Vous devriez consulter ce blog. jacopretorius.net/2014/02/

0 votes

Votre compréhension de rake db:migrate est correcte, mais votre compréhension de rake db:reset est fausse. Voir la réponse la plus haute, de Moritz.

1414voto

moritz Points 9491
  • db:migrate exécute les migrations (uniques) qui n'ont pas encore été exécutées.

  • db:create crée la base de données

  • db:drop supprime la base de données

  • db:schema:load crée des tables et des colonnes dans la base de données existante en suivant schema.rb. Cela supprimera les données existantes.

  • db:setup fait db:create, db:schema:load, db:seed

  • db:reset fait db:drop, db:setup

  • db:migrate:reset fait db:drop, db:create, db:migrate

En général, vous utilisez db:migrate après avoir apporté des modifications au schéma via de nouveaux fichiers de migration (cela n'a de sens que si la base de données contient déjà des données). db:schema:load est utilisé lorsque vous configurez une nouvelle instance de votre application.

J'espère que cela vous aidera.


Mise à jour pour rails 3.2.12 :

Je viens de vérifier la source et les dépendances sont comme ceci maintenant :

  • db:create crée la base de données pour l'environnement actuel

  • db:create:all crée les bases de données pour tous les envs

  • db:drop supprime la base de données pour l'environnement actuel

  • db:drop:all supprime les bases de données pour tous les envs

  • db:migrate exécute les migrations pour l'env actuel qui n'ont pas encore été exécutées

  • db:migrate:up exécute une migration spécifique

  • db:migrate:down annuler une migration spécifique

  • db:migrate:status montre l'état actuel de la migration

  • db:rollback remonte la dernière migration

  • db:forward fait passer la version actuelle du schéma à la suivante

  • db:semence (seulement) exécute le fichier db/seed.rb

  • db:schema:load charge le schéma dans la base de données de l'environnement actuel

  • db:schema:dump vide le schéma de l'environnement actuel (et semble aussi créer la base de données).

  • db:setup exécute db:create db:schema:load db:seed

  • db:reset exécute db:drop db:setup

  • db:migrate:redo exécute (db:migrate:down db:migrate:up) ou (db:rollback db:migrate) en fonction de la migration spécifiée.

  • db:migrate:reset exécute db:drop db:create db:migrate

Pour de plus amples informations, veuillez consulter le site https://github.com/rails/rails/blob/v3.2.12/activerecord/lib/active_record/railties/databases.rake (pour Rails 3.2.x) et https://github.com/rails/rails/blob/v4.0.5/activerecord/lib/active_record/railties/databases.rake (pour Rails 4.0.x)

21 votes

Voici le fichier avec les réponses :) - github.com/rails/rails/blob/master/activerecord/lib/

3 votes

@cutation : db:setup n'exécute sûrement pas db:migrate, car il serait beaucoup trop fragile d'exécuter toutes les migrations juste pour une configuration de db (c'est à cela que sert schema.rb).

2 votes

J'exécute db:reset et cela ensemence ma base de données. Comment cela se fait-il ?

26voto

sudo bangbang Points 8583

TLDR

Utilisez

  • rake db:migrate Si vous voulez apporter des modifications au schéma
  • rake db:reset Si vous voulez abandonner la base de données, rechargez le schéma à partir de schema.rb et de réensemencer la base de données
  • rake db:schema:load Si vous voulez réinitialiser la base de données au schéma fourni dans schema.rb (Cela supprimera toutes les données)

Explications

rake db:schema:load mettra en place le schéma comme prévu dans schema.rb fichier. C'est utile pour une nouvelle installation d'une application, car cela ne prend pas autant de temps que pour une nouvelle installation. db:migrate

Remarque importante, db:schema:load sera supprimer données sur le serveur.

rake db:migrate apporte des modifications au schéma existant. C'est comme créer des versions du schéma. db:migrate regardera dans db/migrate/ pour tous les fichiers ruby et exécute les migrations qui n'ont pas encore été lancées en commençant par la plus ancienne. Rails sait quel fichier est le plus ancien en regardant l'horodatage au début du nom du fichier de migration. db:migrate présente l'avantage de pouvoir également placer des données dans la base de données. En fait, ce n'est pas une bonne pratique. Il est préférable d'utiliser rake db:seed pour ajouter des données.

rake db:migrate fournit des tâches en haut , en bas etc. qui permet des commandes comme rake db:rollback et en fait la commande la plus utile.

rake db:reset fait un db:drop y db:setup
Elle supprime la base de données, la crée à nouveau, charge le schéma et s'initialise avec les données d'origine.

Partie pertinente des commandes de bases de données.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

9voto

Rails 5

db:create - Crée la base de données pour l'application courante RAILS_ENV l'environnement. Si RAILS_ENV n'est pas spécifié, il s'agit par défaut des bases de données de développement et de test.

db:create:all - Crée la base de données pour tous les environnements.

db:drop - Abandonne la base de données pour le RAILS_ENV l'environnement. Si RAILS_ENV n'est pas spécifié, il s'agit par défaut des bases de données de développement et de test.

db:drop:all - Abandonne la base de données pour tous les environnements.

db:migrate - Exécute les migrations pour l'environnement actuel qui n'ont pas encore été exécutées. Par défaut, il exécute les migrations uniquement dans l'environnement de développement.

db:migrate:redo - Foyers db:migrate:down y db:migrate:up o db:migrate:rollback y db:migrate:up en fonction de la migration spécifiée.

db:migrate:up - Exécute l'up pour la VERSION de migration donnée.

db:migrate:down - Exécute le down pour la VERSION de migration donnée.

db:migrate:status - Affiche l'état actuel de la migration.

db:migrate:rollback - Annule la dernière migration.

db:version - Imprime la version actuelle du schéma.

db:forward - Fait passer le schéma à la version suivante.

db:seed - Exécute le db/seeds.rb fichier.

db:schema:load Recrée la base de données à partir du schema.rb fichier. Supprime les données existantes.

db:schema:dump Décharge le schéma de l'environnement actuel dans le fichier db/schema.rb .

db:structure:load - Recrée la base de données à partir du structure.sql fichier.

db:structure:dump - Décharge le schéma de l'environnement actuel dans le fichier db/structure.sql . (Vous pouvez spécifier un autre fichier avec SCHEMA=db/my_structure.sql )

db:setup Runs db:create , db:schema:load y db:semence .

db:reset Runs db:drop y db:setup . db:migrate:reset - Foyers db:drop , db:create y db:migrate .

db:test:prepare - Vérifier les migrations en cours et charger le schéma de test. (Si vous exécutez rake sans aucun argument, il le fera par défaut).

db:test:clone - Recréez la base de données de test à partir du schéma de base de données de l'environnement actuel.

db:test:clone_structure - Similaire à db:test:clone mais elle garantit que votre base de données de test a la même structure, y compris les jeux de caractères et les collations, que la base de données de votre environnement actuel.

db:environment:set - Définir la valeur actuelle RAILS_ENV dans l'environnement ar_internal_metadata table. (Utilisé dans le cadre de la vérification de l'environnement protégé).

db:check_protected_environments - Vérifie si une action destructive peut être exécutée dans l'environnement de travail actuel. RAILS_ENV environnement. Utilisé en interne lors de l'exécution d'une action destructive telle que db:drop o db:schema:load .

2voto

Simon Bagreev Points 1672

D'après ce que j'ai compris, il va supprimer votre base de données et la recréer en se basant sur votre db/schema.rb fichier. C'est pourquoi vous devez vous assurer que votre schema.rb est toujours à jour et sous contrôle de version.

2voto

akshayKhot Points 800

Liste de toutes les tâches

Vous pouvez trouver toutes les tâches liées aux bases de données que Rails propose en exécutant la commande suivante depuis le répertoire d'une application Rails.

  blog (main)  bin/rails help | grep db:

db:create
db:drop
...

Résumé

db:create : Crée la base de données, sauf si elle existe déjà.

db:drop : Abandonne la base de données si elle existe.

db:environment:set : Corrige le EnvironmentMismatchError o NoEnvironmentInSchemaError Ce message est soulevé si les données d'environnement ne sont pas trouvées dans le schéma, en définissant l'environnement actuel dans la table interne.

db:fixtures:load : Il charge les fixtures, c'est-à-dire les données types contre lesquelles vous voulez tester. Ils sont stockés dans le fichier YAML sous l'onglet test/fixtures/ répertoire.

db:migrate : Exécute toutes les migrations qui n'ont pas encore été exécutées, pour l'environnement actuel.

db:migrate:down : Annule les transformations effectuées par la dernière migration. up en exécutant la méthode down méthode.

db:migrate:redo : Recule la base de données d'une migration et effectue une nouvelle migration.

db:migrate:status : Affiche l'état des migrations.

db:migrate:up : Exécute le up pour une migration donnée.

db:prepare : Runs setup si la base de données n'existe pas. Sinon, il exécute les migrations.

db:reset : Réinitialise votre base de données en utilisant vos migrations pour l'environnement actuel. Cela se fait en exécutant la commande db:drop , db:create , db:migrate tâches.

db:rollback : Fait rouler le schéma vers la version précédente, en annulant la migration que vous venez d'exécuter. Si vous souhaitez annuler les précédentes n migrations, passer STEP=n à cette tâche.

db:schema:cache:clear : Efface le fichier db/schema_cache.yml généré par l'application db:schema:cache:dump tâche.

db:schema:cache:dump : Crée un fichier db/schema_cache.yml.

db:schema:dump : Crée un fichier de schéma de base de données (soit db/schema.rb o db/structure.sql en fonction de config.active_record.schema_format ).

db:schema:load : Charge un fichier de schéma de base de données (soit db/schema.rb o db/structure.sql en fonction de config.active_record.schema_format ) dans la base de données.

db:semence : Charge les données de la graine à partir de db/seeds.rb fichier.

db:seed:replant : Tronque les tables de chaque base de données pour l'environnement actuel et charge les graines.

db:setup : Crée toutes les bases de données db:create , charge tous les schémas db:schema:load et s'initialise avec les données de base db:seed . Cependant, il n'abandonnera pas la base de données en premier lieu si elle existe. Utilisez db:reset de supprimer aussi toutes les bases de données d'abord.

db:structure:dump : Déprécié. Il était utilisé pour vider le structure.sql fichier. db:structure:charge : Déprécié. Il était utilisé pour charger le structure.sql fichier.

Pour connaître l'historique des raisons pour lesquelles ces tâches ont été supprimées, consultez cette page. wtf . Non, sérieusement .

db:système:changement : Running rails new sans spécifier de base de données place votre application avec sqlite . C'est une corvée de changer la base de données plus tard. Cette tâche vous permet de modifier facilement la base de données en déléguant à l'administrateur de la base de données la tâche de modifier la base de données. rails db:change SYSTEM=postgresql|mysql|whatever générateur.

db:version : Imprime le numéro de la version actuelle du schéma.

Source : Toutes les tâches liées aux bases de données dans Rails

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X