web-dev-qa-db-fra.com

Purger ou recréer une base de données Ruby sur Rails

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?

558
AnApprentice

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.

1032
thenengah

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.

152
Eneko Alonso

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+
43
TK.

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
36
Robbie Guilfoyle

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.

29
coreyward

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
11

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é!

11
Manish Shrivastava

À partir de la ligne de commande

rake db:migrate:reset
11
user2747051

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.

8
Erik Trautman

Vous pouvez utiliser cette ligne de commande suivante:

rake db:drop db:create db:migrate db:seed db:test:clone
6
user1358180

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 
4
Kush

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

4

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

3
Aleksandr Babak

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
2
Victor

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

1
Obed Lorisson

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.

1
Touseef Murtaza

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:

  • Si schéma: load est utilisé plus rapidement que toutes les migrations, le même résultat est obtenu.
  • Toutes les données seront perdues.
  • Vous pouvez exécuter plusieurs râteaux sur une seule ligne.
  • Fonctionne avec Rails 3.
1
urko

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
1
Thorin

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"])
0
ardochhigh