J'ai un dev Ruby sur Rails base de données 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?
Je connais deux façons de faire cela:
Cela réinitialisera votre base de données et rechargera votre schéma actuel avec tous les éléments suivants:
rake db:reset db:migrate
Cela détruira votre base de données, puis le créera, puis migrera votre schéma actuel:
rake db:drop db:create db:migrate
Toutes les données seront perdues dans les deux scénarios.
Sur Rails 4, tout ce dont vous avez besoin est
$ rake db:schema:load
Cela supprimerait tout le 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.
J'utilise le liner suivant dans Terminal.
$ rake db:drop && rake db:create && rake db:migrate && rake db:schema:dump && rake db:test:prepare
Je mets cela comme un alias de shell et le nomme remigrate
A présent, vous pouvez facilement "chaîner" Rails tâches:
$ rake db:drop db:create db:migrate db:schema:dump db:test:prepare # db:test:prepare no longer available since Rails 4.1.0.rc1+
Mise à jour: Dans Rails 5, cette commande sera accessible via cette commande:
Rails db:purge db:create db:migrate Rails_ENV=test
À partir de la dernière version de Rails 4.2, vous pouvez maintenant exécuter:
rake db:purge
Source: commit
# desc "Empty the database from DATABASE_URL or config/database.yml for the current Rails_ENV (use db:drop:all to drop all databases in the config). Without Rails_ENV it defaults to purging the development and test databases."
task :purge => [:load_config] do
ActiveRecord::Tasks::DatabaseTasks.purge_current
end
Il peut être utilisé ensemble comme mentionné ci-dessus:
rake db:purge db:create db:migrate Rails_ENV=test
Selon ce que vous voulez, vous pouvez utiliser…
rake db:create
… Pour construire la base de données à partir de zéro à partir de config/database.yml
, ou…
rake db:schema:load
… Pour construire la base de données à partir de votre fichier schema.rb
.
Lancez 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:
rake db:drop db:create db:migrate db:seed
Puisque l'environnement par défaut pour rake
est le développement , si vous voyez une exception dans les tests de spécification, vous devez recréer la base de données pour testez l'environnement comme suit:
Rails_ENV=test rake db:drop db:create db:migrate
Dans la plupart des cas, la base de données de test est semée pendant les procédures de test. Par conséquent, il n'est pas nécessaire que l'action de tâche db:seed
soit transmise. Sinon, vous devez préparer la base de données:
rake db:test:prepare
ou
Rails_ENV=test rake db:seed
En outre, pour utiliser la tâche recréer , vous pouvez ajouter dans Rakefile le code suivant:
namespace :db do
task :recreate => [ :drop, :create, :migrate ] do
if ENV[ 'Rails_ENV' ] !~ /test|cucumber/
Rake::Task[ 'db:seed' ].invoke
end
end
end
Puis émettez:
rake db:recreate
Utiliser comme
rake db:drop db:create db:migrate db:seed
Tout en une ligne. C'est plus rapide car l'environnement n'est pas rechargé encore et encore.
db: drop - va supprimer la base de données.
db: create - créera une base de données (hôte/db/mot de passe 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 départ possibles à partir du répertoire (db/migration/seed.rb) ..
Je préfère d'habitude:
rake db:reset
faire tout à la fois.
À votre santé!
À partir de la ligne de commande
rake db:migrate:reset
Vous pouvez faire manuellement:
rake db:drop
rake db:create
rake db:migrate
Ou simplement rake db:reset
, qui exécutera les étapes ci-dessus, mais également votre fichier db/seeds.rb
.
Une nuance supplémentaire est que rake db:reset
est chargé directement à partir de votre fichier schema.rb
, par opposition à la réexécution de tous les fichiers de migration.
Vos données sont emportées dans tous les cas.
Vous pouvez utiliser cette ligne de commande suivante:
rake db:drop db:create db:migrate db:seed db:test:clone
Pour supprimer une base de données particulière, vous pouvez le faire sur la console Rails:
$Rails console
Loading development environment
1.9.3 > ActiveRecord::Migration.drop_table(:<table_name>)
1.9.3 > exit
Et puis migrez à nouveau la base de données
$bundle exec rake db:migrate
Sur Rails 4.2, pour supprimer toutes les données mais préserver la base de données
$ bin/rake db:purge && bin/rake db:schema:load
https://github.com/Rails/rails/blob/4-2-stable/activerecord/CHANGELOG.md
Vous pouvez utiliser db:reset
- pour exécuter db: drop et db: setup ou db:migrate:reset
- pour exécuter db: drop, db: create et db: migrate.
dépendant de vous voulez utiliser exist schema.rb
Selon guide Rails , cette ligne devrait être utilisée car elle se chargerait à partir du schema.rb
au lieu de recharger les fichiers de migration un par un:
rake db:reset
En développement, vous souhaiterez toujours recréer la base de données. Vous pouvez ainsi définir une tâche rake dans votre dossier lib/tasks.
namespace :db do
task :all => [:environment, :drop, :create, :migrate] do
end
end
et dans le terminal, vous courrez
rake db:all
il va reconstruire votre base de données
Simplement tu peux courir
rake db:setup
Il va supprimer la base de données, créer une nouvelle base de données et renseigner la base de données si vous avez créé un fichier de départ avec certaines données.
3 options, même résultat:
1. Toutes les étapes:
$ rake db:drop # deletes the database for the current env
$ rake db:create # creates the database for the current env
$ rake db:schema:load # loads the schema already generated from schema.rb / erases data
$ rake db:seed # seed with initial data
2. Réinitialiser:
$ rake db:reset # drop / schema:load / seed
. Migrer: réinitialiser:
$ rake db:migrate:reset # drop / create / migrate
$ rake db:seed
Notes:
Je pense que la meilleure façon d'exécuter cette commande:
**rake db:reset** it does db:drop, db:setup
rake db:setup does db:create, db:schema:load, db:seed
Aujourd'hui, j'ai apporté pas mal de modifications à mon schéma Rails. J'ai réalisé que j'avais besoin de deux modèles supplémentaires dans une hiérarchie et de certains autres à supprimer. Il y avait beaucoup de petits changements nécessaires aux modèles et aux contrôleurs.
J'ai ajouté les deux nouveaux modèles et les ai créés en utilisant:
rake db:migrate
Ensuite, j'ai édité le fichier schema.rb. J'ai supprimé manuellement les anciens modèles devenus inutiles, modifié le champ de la clé étrangère selon les besoins et réorganisé un peu pour le rendre plus clair. I supprimé toutes les migrations, puis relancez la construction via:
rake db:reset
Cela a fonctionné parfaitement. Toutes les données doivent être rechargées, bien sûr. Rails a réalisé que les migrations avaient été supprimées et a réinitialisé la limite supérieure:
-- assume_migrated_upto_version(20121026094813, ["/Users/sean/Rails/f4/db/migrate"])