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


J'ai une base de données Dev Ruby on Rails 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?


516
2017-11-07 01:23


origine


Réponses:


Je connais deux façons de le faire:

Cela va réinitialiser votre base de données et recharger votre schéma actuel avec tous:

rake db:reset db:migrate

Cela va détruire votre base de données, puis le créer et ensuite migrer votre schéma actuel:

rake db:drop db:create db:migrate

Toutes les données seront perdues dans les deux scénarios.


966
2017-11-07 01:40



Sur Rails 4, tout est nécessaire

$ 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.


143
2018-01-20 04:09



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 l'ai mis comme un alias shell et l'ai appelé remigrate

À ce stade, vous pouvez facilement "chaîner" les tâches Rails:

$ 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+

38
2017-11-07 01:33



Mise à jour: Avec l’arrivée de Rails 5, cette commande sera accessible via cette commande:

rails db: purge db: crée db: migrate RAILS_ENV = test


À partir de la dernière version 4.2 de rails, vous pouvez maintenant exécuter:

rake db:purge 

La source: commettre

# 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

30
2018-01-02 04:30



En fonction de 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 schema.rb fichier.


27
2017-11-07 01:29



Il suffit de lancer 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

Depuis l'environnement par défaut pour rake est développement, dans le cas où vous voyez l'exception dans les tests de spécification, vous devez recréer db pour le tester 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, db:seed l'action de la tâche n'est pas requise pour être transmise. Sinon, vous devez préparer la base de données:

rake db:test:prepare

ou

RAILS_ENV=test rake db:seed

De plus, pour utiliser le recréer tâche que 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

Ensuite, émettez:

rake db:recreate

11
2018-01-28 07:46



À partir de la ligne de commande, exécutez

rake db:migrate:reset

11
2017-11-25 12:58



Utilisez comme

rake db:drop db:create db:migrate db:seed

Tout en une ligne. C'est plus rapide car l'environnement ne se recharge pas encore et encore.

db: déposer - va supprimer la base de données.

db: créer - va créer une base de données (host / db / password sera pris de config / database.yml)

db: migrer - exécutera les migrations existantes à partir du répertoire (db / migration /.rb) *.

db: graine - exécutera des données de graine possibles à partir du répertoire (db / migration / seed.rb)..

Je préfère habituellement:

rake db:reset

faire tout à la fois.

À votre santé!


11
2017-12-01 10:52



Vous pouvez faire manuellement:

rake db:drop
rake db:create
rake db:migrate

Ou juste rake db:reset, qui va exécuter les étapes ci-dessus, mais aussi exécuter votre db/seeds.rb fichier.

Une nuance supplémentaire est que rake db:reset charge directement à partir de votre schema.rb fichier par opposition à l'exécution de tous les fichiers de migrations à nouveau.

Vos données sont époustouflées dans tous les cas.


8
2017-10-14 02:19