Очистить или восстановить базу данных Ruby on Rails - PullRequest
553 голосов
/ 07 ноября 2010

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

rake db:recreate

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

Ответы [ 19 ]

1027 голосов
/ 07 ноября 2010

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

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

rake db:reset db:migrate

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

rake db:drop db:create db:migrate

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

151 голосов
/ 20 января 2014

На Rails 4 все, что нужно -

$ rake db:schema:load

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

42 голосов
/ 07 ноября 2010

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

$ 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+
35 голосов
/ 02 января 2015

Обновление: в 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
28 голосов
/ 07 ноября 2010

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

rake db:create

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

rake db:schema:load

… для создания базы данных с нуля из файла schema.rb.

11 голосов
/ 28 января 2014

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

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

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

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

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

rake db:test:prepare

или

RAILS_ENV=test rake db:seed

Кроме того, чтобы использовать задачу пересоздать , которую вы можете добавить в 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
11 голосов
/ 01 декабря 2014

Используйте как

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

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

db: drop - удалит базу данных.

db: create - создаст базу данных (хост / db / пароль будет взят из config / database.yml)

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

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

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

rake db:reset

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

Ура!

11 голосов
/ 25 ноября 2013

Из командной строки запустите

rake db:migrate:reset
8 голосов
/ 14 октября 2013

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

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

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

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

Ваши данные уничтожены во всех случаях.

6 голосов
/ 30 января 2013

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

rake db:drop db:create db:migrate db:seed db:test:clone
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...