La différence entre rake db:migrate
et rake db:reset
est assez claire dans ma tête. Ce que je ne comprends pas, c'est commentrake db:schema:load
les deux précédents sont différents.
Juste pour être sûr que je suis sur la même page:
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 (fait probablement unrake db:drop
+rake db:create
+rake db:migrate
) et exécute la migration sur une nouvelle base de données.
Veuillez aider à clarifier, si ma compréhension a mal tourné.
ruby-on-rails
ruby
database
rake
Gaurav Agarwal
la source
la source
rake --tasks
aide?rake db:migrate
est correcte, mais votre compréhension derake db:reset
n'est pas bonne . Voir la réponse la plus haute, de moritz.rails db:migrate
,rails db:reset
,rails db:schema:load
. Voir stackoverflow.com/questions/38403533/…Réponses:
db: schema: load crée des tables et des colonnes dans la base de données (existante) après schema.rb
db: setup fait db: create, db: schema: load, db: seed
En règle générale, vous utiliseriez db: migrate après avoir apporté des modifications au schéma via de nouveaux fichiers de migration (cela n'a de sens que s'il existe déjà des données dans la base de données). db: schema: load est utilisé lorsque vous configurez une nouvelle instance de votre application.
J'espère que ça aide.
MISE À JOUR pour les rails 3.2.12:
Je viens de vérifier la source et les dépendances sont comme ceci maintenant:
db: schema: dump vide le schéma de l'environnement actuel (et semble également créer la base de données)
db: le programme d'installation exécute db: schema: load, db: seed
Pour plus d'informations, veuillez consulter 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)
la source
db:create
si nécessaire. Au moins à partir des rails 4.0.2.rake db:migrate
lors de l'appelrake db:setup
s'il y a des migrations en attente mais n'exécutera pas les migrations en attente.TLDR
Utilisation
rake db:migrate
Si vous souhaitez apporter des modifications au schémarake db:reset
Si vous souhaitez supprimer la base de données, recharger le schéma à partir deschema.rb
et réamorcer la base de donnéesrake db:schema:load
Si vous souhaitez réinitialiser la base de données au schéma comme indiqué dansschema.rb
(Cela supprimera toutes les données)Explications
rake db:schema:load
configurera le schéma comme indiqué dans leschema.rb
fichier. Ceci est utile pour une nouvelle installation de l'application car cela ne prend pas autant de temps quedb:migrate
rake db:migrate
apporte des modifications au schéma existant. C'est comme créer des versions de schéma.db:migrate
rechercheradb/migrate/
tous les fichiers ruby et exécutera les migrations qui ne sont pas encore exécutées en commençant par les plus anciennes. Rails sait quel fichier est le plus ancien en regardant l'horodatage au début du nom du fichier de migration.db:migrate
vient avec l'avantage que les données peuvent également être mises dans la base de données. Ce n'est en fait pas une bonne pratique. Il vaut mieux l'utiliserrake db:seed
pour ajouter des données.rake db:migrate
fournit des tâches vers le haut , vers le bas, etc. qui permettent des commandes commerake db:rollback
et en font la commande la plus utile.rake db:reset
fait undb:drop
etdb:setup
il supprime la base de données, la crée à nouveau, charge le schéma et initialise avec les données de départ
Partie pertinente des commandes de databases.rake
la source
Pour autant que je comprends, il va supprimer votre base de données et la recréer en fonction de votre
db/schema.rb
fichier. C'est pourquoi vous devez vous assurer que votreschema.rb
fichier est toujours à jour et sous contrôle de version.la source
Vous pouvez simplement regarder dans les tâches Active Record Rake car c'est là que je pense qu'ils vivent comme dans ce fichier. https://github.com/rails/rails/blob/fe1f4b2ad56f010a4e9b93d547d63a15953d9dc2/activerecord/lib/active_record/tasks/database_tasks.rb
Qu'est-ce qu'ils font est votre question à droite?
Cela dépend d'où ils viennent et c'est juste un exemple pour montrer qu'ils varient en fonction de la tâche. Ici, nous avons un fichier différent plein de tâches.
https://github.com/rails/rails/blob/fe1f4b2ad56f010a4e9b93d547d63a15953d9dc2/activerecord/Rakefile
qui a ces tâches.
Cela ne répondra peut-être pas à votre question, mais pourrait vous donner un aperçu de la suite et examiner la source, en particulier les fichiers et les tâches de râteau. Comme ils font un très bon travail pour vous aider à utiliser les rails, ils ne documentent pas toujours bien le code. Nous pourrions tous aider là-bas si nous savons ce qu'il est censé faire.
la source
MIS À JOUR pour Rails 5:
db:create
- Crée la base de données pour l' environnement RAILS_ENV actuel . 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
- Supprime la base de données pour l' environnement RAILS_ENV actuel . 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
- Supprime la base de données pour tous les environnements.db:migrate
- Exécute des migrations pour l'environnement actuel qui ne sont pas encore exécutées. Par défaut, il exécutera les migrations uniquement dans l'environnement de développement.db:migrate:redo
- Exécute db: migrate: down et db: migrate: up ou db: migrate: rollback et db: migrate: up en fonction de la migration spécifiée.db:migrate:up
- Exécute la version 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
- Pousse le schéma à la prochaine version.db:seed
- Exécute le fichier db / seeds.rb .db:schema:load
Recrée la base de données à partir du fichier schema.rb .db:schema:dump
Vide le schéma de l'environnement actuel dans db / schema.rb .db:structure:load
- Recrée la base de données à partir du fichier structure.sql .db:structure:dump
- Vide le schéma de l'environnement actuel dans db / structure.sql . (Vous pouvez spécifier un autre fichier avecSCHEMA=db/my_structure.sql
)db:setup
Exécute db: create , db: schema: load et db: seed .db:reset
Exécute db: drop et db: setup .db:migrate:reset
- Exécute db: drop , db: create et db: migrate .db:test:prepare
- Vérifiez les migrations en attente et chargez le schéma de test. (Si vous exécutez rake sans 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 il garantira que votre base de données de test a la même structure, y compris les jeux de caractères et les classements, que la base de données de votre environnement actuel.db:environment:set
- Définissez l' environnement RAILS_ENV actuel dans la table ar_internal_metadata . (Utilisé dans le cadre de la vérification de l'environnement protégé.)db:check_protected_environments
- Vérifie si une action destructrice peut être effectuée dans l' environnement RAILS_ENV actuel . Utilisé en interne lors de l'exécution d'une action destructrice telle que db: drop ou db: schema: load .la source