J'ai une base de données Ruby on Rails de développeur pleine de données. Je veux tout supprimer et reconstruire la base de données. Je pense utiliser quelque chose comme:
rake db:recreate
Est-ce possible?
ruby-on-rails
ruby-on-rails-3
rake
Un apprenti
la source
la source
rake db:drop db:create db:schema:load
pourrait être plus approprié querake db:drop db:create db:migrate
(même si je suis prêt à me tromper à ce sujet).rake db:drop db:create db:migrate
db:drop + db:create + db:migrate == db:migrate:reset
. Je recourt habituellement àdb:schema:load
, lorsque les migrations sont interrompues. J'ai rarement besoin de recréer une base de données, donc la vitesse n'a pas beaucoup d'importance. Aussi, si vous avez des migrations non appliquéesdb:schema:load
etdb:reset
que vous ne les appliquerez pas. Je ne sais pas si c'est vraiment un argument.Réponses:
Je connais deux façons de procéder:
Cela réinitialisera votre base de données et rechargera votre schéma actuel avec tous:
Cela détruira votre base de données, puis la créera, puis migrera votre schéma actuel:
Toutes les données seront perdues dans les deux scénarios.
la source
rake db:reset
également exécuter toutes les migrations (au moins sur Rails 3), ce qui devrait être tout ce qui est nécessaire, non?rake db:test:prepare
pour les tests, sinon vous obtiendrez une erreur comme:Could not find table 'things' (ActiveRecord::StatementInvalid)
rake db:reset
etrake db:drop db:create db:migrate
faire deux choses complètement différentes . Ce dernier efface toute la base de données de l'application, la recrée, puis passe par chaque migration pour mettre à jour le schéma (db/schema.rb
oudb/structure.sql
), mais ne la remplit pas de données de départ. Au lieu de cela, le premier est un alias pourrake db:drop db:schema:load db:seed
, donc il efface toute la base de données de l'application, mais il ne met pas à jour le schéma , puis se remplit de données de départ. Donc, si vous n'avez rien changé dans vos migrations, la première est plus rapide, la seconde est plus sûre.Sur Rails 4, tout ce dont vous avez besoin est
Cela supprimerait l'intégralité du contenu de votre base de données et recréerait le schéma à partir de votre fichier schema.rb, sans avoir à appliquer toutes les migrations une par une.
la source
db:drop
et j'étaisdb:create
redondant.J'utilise la doublure suivante dans le terminal.
J'ai mis cela comme un alias de shell et je l'ai nommé
remigrate
À présent, vous pouvez facilement "chaîner" les tâches Rails:
la source
db:reset
, qui est juste un Google (ou consultez les guides ). Mon commentaire n'était pas de déconseiller d'utiliser cela, mais d'éviter d'utiliserdb:migrate
quand ce que vous voulez vraimentdb:schema:load
.rake
, comme suit:rake db:drop db:create db:schema:load
.db:migrate
... alors quedb:schema:load
c'est sensible à quelqu'un qui oublie de vérifier schema.rb dans le contrôle de version à côté d'une nouvelle migration.Mise à jour: dans Rails 5, cette commande sera accessible via cette commande:
rails db:purge db:create db:migrate RAILS_ENV=test
Depuis la dernière version de rails 4.2, vous pouvez désormais exécuter:
Source: commit
Il peut être utilisé ensemble comme mentionné ci-dessus:
la source
db:purge
"supprimez toutes les données mais conservez toutes les tables et colonnes"db:purge
ne préserve pas les tables.Selon ce que vous voulez, vous pouvez utiliser…
rake db:create
… Pour construire la base de données à partir de zéro
config/database.yml
, ou…rake db:schema:load
… Pour construire la base de données à partir de zéro à partir de votre
schema.rb
fichier.la source
Depuis la ligne de commande, exécutez
la source
schema.rb
et si vous seulementdrop
etcreate
,migrate
ne fera rien (testé sur les rails 6)Utilisez comme
Tout en une seule ligne. C'est plus rapide car l'environnement n'est pas rechargé encore et encore.
db: drop - supprimera la base de données.
db: create - créera une base de données (host / db / password sera tiré de config / database.yml)
db: migrate - exécutera les migrations existantes à partir du répertoire (db / migration / .rb) *.
db: seed - exécutera les données de graines possibles à partir du répertoire (db / migration / seed.rb) ..
Je préfère généralement:
faire tout à la fois.
À votre santé!
la source
db:reset == db:drop + db:schema:load + db:seed
,db:migrate:reset == db:drop + db:create + db:migrate
Exécutez simplement la séquence des étapes: supprimez la base de données, puis recréez-la à nouveau, migrez les données et, si vous avez des graines, semez la base de données:
Étant donné que l'environnement par défaut
rake
est le développement , si vous voyez l'exception dans les tests de spécification, vous devez recréer db pour l' environnement de test comme suit:Dans la plupart des cas, la base de données de test est semée pendant les procédures de test, il
db:seed
n'est donc pas nécessaire de passer une action de tâche. Sinon, vous devez préparer la base de données:ou
De plus, pour utiliser la tâche de recréation , vous pouvez ajouter dans Rakefile le code suivant:
Ensuite, lancez:
la source
Vous pouvez manuellement:
Ou tout simplement
rake db:reset
, qui exécutera les étapes ci-dessus mais exécutera également votredb/seeds.rb
fichier.Une nuance supplémentaire est celle qui se
rake db:reset
charge directement à partir de votreschema.rb
fichier au lieu d'exécuter à nouveau tous les fichiers de migration.Vos données sont emportées dans tous les cas.
la source
Vous pouvez utiliser cette ligne de commande suivante:
la source
Pour supprimer une base de données particulière, vous pouvez le faire sur la console rails:
Et puis migrez à nouveau DB
la source
Sur rails 4.2, pour supprimer toutes les données mais conserver la base de données
https://github.com/rails/rails/blob/4-2-stable/activerecord/CHANGELOG.md
la source
Vous pouvez utiliser
db:reset
- pour exécuter db: drop et db: setup oudb:migrate:reset
- qui exécute db: drop, db: create et db: migrate.dépendant à vous voulez utiliser existe schema.rb
la source
Selon le guide Rails , cette doublure devrait être utilisée car elle se chargerait à partir de au
schema.rb
lieu de recharger les fichiers de migration un par un:la source
Parce qu'en développement, vous voudrez toujours recréer la base de données, vous pouvez définir une tâche de râteau dans votre dossier lib / tasks comme ça.
et dans le terminal, vous exécuterez
il reconstruira votre base de données
la source
Je pense que la meilleure façon d'exécuter cette commande:
la source
Vous pouvez simplement exécuter
rake db:setup
Il supprimera la base de données, créera une nouvelle base de données et remplira db à partir de la graine si vous avez créé un fichier de graine avec certaines données.
la source
3 options, même résultat:
1. Toutes les étapes:
2. Réinitialiser:
3. Migrer: réinitialiser:
Remarques:
la source
Aujourd'hui, j'ai apporté plusieurs modifications à mon schéma de rails. J'ai réalisé que j'avais besoin de deux modèles supplémentaires dans une hiérarchie et de certains autres à supprimer. De nombreux petits changements ont été nécessaires sur les modèles et les contrôleurs.
J'ai ajouté les deux nouveaux modèles et les ai créés en utilisant:
J'ai ensuite édité le fichier schema.rb. J'ai supprimé manuellement les anciens modèles qui n'étaient plus nécessaires, j'ai changé le champ de clé étrangère selon les besoins et l'ai juste réorganisé un peu pour le rendre plus clair pour moi. J'ai supprimé toutes les migrations, puis relancé la génération via:
Cela a parfaitement fonctionné. Bien entendu, toutes les données doivent être rechargées. Rails s'est rendu compte que les migrations avaient été supprimées et a réinitialisé la ligne des hautes eaux:
la source