Очистите или заново создайте базу данных Ruby on Rails

У меня есть база данных dev Ruby on Rails, полная данных. Я хочу удалить все и перестроить базу данных. Я думаю использовать что-то вроде:

rake db:recreate

Возможно ли это?

Ответ 1

Я знаю два способа сделать это:

Это будет reset ваша база данных и перезагрузит вашу текущую схему всеми:

rake db:reset db:migrate

Это уничтожит ваш db, а затем создаст его, а затем перенесет вашу текущую схему:

rake db:drop db:create db:migrate

Все данные будут потеряны в обоих сценариях.

Ответ 2

В Rails 4 все необходимое

$ rake db:schema:load

Это приведет к удалению всего содержимого вашей БД и воссозданию схемы из файла schema.rb, без необходимости применять все миграции один за другим.

Ответ 3

Я использую следующий вкладыш в Терминале.

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

Ответ 4

Обновление: в 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

Ответ 5

В зависимости от того, что вы хотите, вы можете использовать...

rake db:create

... для создания базы данных с нуля с config/database.yml или...

rake db:schema:load

... для создания базы данных с нуля из вашего файла schema.rb.

Ответ 6

В командной строке выполните

rake db:migrate:reset

Ответ 7

Просто выполните последовательность шагов: отбросьте базу данных, затем заново создайте ее, перенесите данные и, если у вас есть семена, заселите базу данных:

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

Поскольку среда по умолчанию для rake - это разработка, в случае, если вы видите исключение в тестах spec, вы должны повторно создать db для тестовой среды следующим образом:

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

В большинстве случаев тестовая база данных посеяна во время тестовых процедур, поэтому выполнение задачи db:seed не требуется. В противном случае вы должны подготовить базу данных:

rake db:test:prepare

или

RAILS_ENV=test rake db:seed

Кроме того, чтобы использовать задачу rereate, вы можете добавить в 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

Ответ 8

Использовать как

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

Все в одной строке. Это происходит быстрее, так как среда не перезагружается снова и снова.

db: drop - отбросит базу данных.

db: create - создаст базу данных (host/db/password будут взяты из config/database.yml)

db: migrate - запустит существующие миграции из каталога (db/migration/.rb) *.

db: seed - запустит данные семян из каталога (db/migration/seed.rb)..

Я обычно предпочитаю:

rake db:reset

сделать все сразу.

Ура!

Ответ 9

Вы можете сделать вручную:

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

Или просто rake db:reset, который выполнит вышеуказанные шаги, но также запустит ваш файл db/seeds.rb.

Добавленный нюанс заключается в том, что rake db:reset загружается непосредственно из вашего файла schema.rb, а не снова запускает все файлы миграции.

Данные удаляются во всех случаях.

Ответ 10

Вы можете использовать следующую командную строку:

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

Ответ 11

Чтобы удалить определенную базу данных, вы можете сделать это на консоли 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 

Ответ 13

Вы можете использовать db:reset - для запуска db: drop и db: настройка или db:migrate:reset - выполняется db: drop, db: create и db: migrate.

зависит от того, что вы хотите использовать, существует schema.rb

Ответ 14

В соответствии с Rails guide, этот один лайнер должен использоваться, потому что он будет загружаться из schema.rb вместо перезагрузки файлов миграции один на один:

rake db:reset

Ответ 15

Поскольку в разработке вы всегда хотите воссоздать базу данных, вы можете определить задачу рейка в своей папке lib/tasks.

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

а в терминале вы запустите

rake db:all

он восстановит вашу базу данных

Ответ 16

Я думаю, что лучший способ запустить эту команду:

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

Ответ 17

Просто ты можешь бежать

rake db:setup

Он удалит базу данных, создаст новую базу данных и заполнит базу данных из начального числа, если вы создали исходный файл с некоторыми данными.

Ответ 18

Сегодня я сделал немало изменений в моей схеме рельсов. Я понял, что мне нужны еще две модели в иерархии, а некоторые другие - для удаления. Для моделей и контроллеров потребовалось много небольших изменений.

Я добавил две новые модели и создал их, используя:

rake db:migrate

Затем я редактировал файл schema.rb. Я вручную удалил старые модели, которые больше не нужны, изменил поле внешнего ключа по мере необходимости и немного изменил его порядок, чтобы сделать его более ясным для меня. я удалил все миграции, а затем повторно запустил сборку через:

rake db:reset

Это сработало отлично. Разумеется, все данные должны быть перезагружены. Рельсы поняли, что миграции были удалены, и reset знак высокой воды:

-- assume_migrated_upto_version(20121026094813, ["/Users/sean/rails/f4/db/migrate"])

Ответ 19

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

3. Миграция: сброс:

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

Заметки:

  • Если используется схема: загрузка выполняется быстрее, чем выполнение всех миграций, но результат тот же.
  • Все данные будут потеряны.
  • Вы можете запустить несколько граблей в одной строке.
  • Работает с рельсами 3.