web-dev-qa-db-ja.com

Ruby on Railsデータベースを消去または再作成する

私はdev Ruby on Railsデータベースにデータがいっぱいあります。すべてを削除してデータベースを再構築したいです。私はのようなものを使うことを考えています:

rake db:recreate

これは可能ですか?

548
AnApprentice

これを行うには2つの方法があります。

これによりデータベースがリセットされ、現在のスキーマにallがリロードされます。

rake db:reset db:migrate

これはあなたのdbを破壊し、そしてそれを作成し、そしてあなたの現在のスキーマを移行します:

rake db:drop db:create db:migrate

両方のシナリオですべてのデータが失われます。

1020
thenengah

Rails 4では、必要なのは

$ rake db:schema:load

これにより、すべての移行を1つずつ適用しなくても、DBの内容全体が削除され、schema.rbファイルからスキーマが再作成されます。

150
Eneko Alonso

ターミナルでは以下のライナーを使用しています。

$ rake db:drop && rake db:create && rake db:migrate && rake db:schema:dump && rake db:test:prepare

これをシェルのエイリアスとし、remigrateと名付けました。

ここまでで、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+
42
TK.

更新:Rails 5では、このコマンドはこのコマンドを通してアクセス可能になります。

Rails db:purge db:create db:migrate Rails_ENV=test


最新のRails 4.2リリース以降では、実行できるようになりました。

rake db:purge 

出典: コミット

# 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

上記のように一緒に使用できます。

rake db:purge db:create db:migrate Rails_ENV=test
33

あなたが欲しいものに応じて、あなたは使うことができます…

rake db:create

config/database.ymlから最初からデータベースを構築する、あるいは…

rake db:schema:load

…あなたのschema.rbファイルから一からデータベースを構築するため。

28
coreyward

一連の手順を実行するだけです。データベースを削除してから再作成し、データを移行します。シードがある場合は、データベースを播種します。

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

rakeのデフォルト環境は development であるため、スペックテストで例外が発生した場合は、 test 環境用にdbを再作成する必要があります。

Rails_ENV=test rake db:drop db:create db:migrate

ほとんどの場合、テストデータベースはテスト手順中に蒔かれているので、db:seedタスクアクションを渡す必要はありません。それ以外の場合は、データベースを準備する必要があります。

rake db:test:prepare

または

Rails_ENV=test rake db:seed

さらに、 recreate タスクを使用するには、 Rakefile に次のコードを追加します。

namespace :db do
   task :recreate => [ :drop, :create, :migrate ] do
      if ENV[ 'Rails_ENV' ] !~ /test|cucumber/
         Rake::Task[ 'db:seed' ].invoke
      end
   end
end

その後発行します。

rake db:recreate

好きに使う

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

一行ですべて。環境が何度も何度も再ロードされないので、これはより速いです。

db:drop - データベースを削除します。

db:create - データベースを作成します (ホスト/ db /パスワードはconfig/database.ymlから取得されます)

db:migrate - ディレクトリ から既存のマイグレーションを実行します(db/migration/ 。rb)*。

db:seed - ディレクトリから可能なシードデータを実行します (db/migration/seed.rb) ..

私は通常好む:

rake db:reset

一気にやります。

乾杯!

11

コマンドラインから

rake db:migrate:reset
11
user2747051

手動で行うことができます。

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

あるいはrake db:resetだけで、上記のステップを実行しますが、あなたのdb/seeds.rbファイルも実行します。

追加の微妙な点は、すべてのマイグレーションファイルを再度実行するのではなく、rake db:resetschema.rbファイルから直接ロードされることです。

あなたのデータはどのような場合でも吹き飛ばされます。

8
Erik Trautman

次のコマンドラインを使うことができます。

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

特定のデータベースを削除するには、Railsコンソールでこれを実行できます。

$Rails console
Loading development environment
1.9.3 > ActiveRecord::Migration.drop_table(:<table_name>)
1.9.3 > exit

そして、再びDBを移行する

$bundle exec rake db:migrate 
4
Kush

Rails 4.2では、すべてのデータを削除してデータベースを保持する

$ bin/rake db:purge && bin/rake db:schema:load

https://github.com/Rails/rails/blob/4-2-stable/activerecord/CHANGELOG.md

4

Db:dropとdb:setupを実行するにはdb:reset - db:drop、db:createとdb:migrateを実行するdb:migrate:resetを使用できます。

依存している既存のschema.rbを使いたい

3
Aleksandr Babak

Railsガイド によると、マイグレーションファイルを1つずつ再ロードするのではなくschema.rbからロードするため、このoneライナーを使用する必要があります。

rake db:reset
2
Victor

開発中は、常にデータベースを再作成したいので、lib/tasksフォルダーにレーキタスクを定義できます。

  namespace :db do
      task :all => [:environment, :drop, :create, :migrate] do
   end 
end

そしてターミナルであなたは走るでしょう

rake db:all

データベースを再構築します

1
Obed Lorisson

走らせるだけ

rake db:setup

データを含むシードファイルを作成した場合は、データベースを削除し、新しいデータベースを作成し、dbをシードから追加します。

1
Touseef Murtaza

3つのオプション、同じ結果:

1。すべてのステップ:

  $ 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。リセット:

  $ rake db:reset          # drop / schema:load / seed

Migrate:reset:

  $ rake db:migrate:reset  # drop / create / migrate
  $ rake db:seed

注:

  • Schema:loadを使用すると、すべての移行を行うよりも速くなりますが、結果は同じです。
  • すべてのデータが失われます。
  • 1行で複数のレーキを実行できます。
  • Railsで動作します3。
1
urko

私はこのコマンドを実行するための最良の方法だと思います:

**rake db:reset** it does db:drop, db:setup
 rake db:setup does db:create, db:schema:load, db:seed
1
Thorin

私は今日、私のRailsスキーマにかなりの数の変更を加えました。私は、階層内に2つのモデルを追加する必要があり、他のいくつかは削除する必要があることに気付きました。モデルとコントローラーには、多くの小さな変更が必要でした。

2つの新しいモデルを追加し、それらを使用して作成しました。

rake db:migrate

それから私はschema.rbファイルを編集しました。不要になった古いモデルを手動で削除し、必要に応じて外部キーフィールドを変更し、わかりやすくするために少し並べ替えました。 I 削除された すべての移行を行ってから、次のようにしてビルドを再実行しました。

rake db:reset

それは完璧に機能しました。もちろん、すべてのデータをリロードする必要があります。 Railsは、移行が削除され、最高水準点を再設定したことに気付きました。

-- assume_migrated_upto_version(20121026094813, ["/Users/sean/Rails/f4/db/migrate"])
0
ardochhigh