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

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

rake db:recreate

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

483
задан 07 нояб. '10 в 4:23
источник поделиться
17 ответов

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

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

rake db:reset db:migrate

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

rake db:drop db:create db:migrate

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

920
ответ дан 07 нояб. '10 в 4:40
источник

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

$ rake db:schema:load

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

137
ответ дан 20 янв. '14 в 7:09
источник

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

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

Я поместил это как псевдоним оболочки и назвал его remigrate

37
ответ дан 07 нояб. '10 в 4:33
источник

Обновление: с появлением Rails 5 эта команда будет доступна с помощью этой команды:

rails db: purge db: create db: migrate RAILS_ENV = test


Начиная с новейшей версии рельсов 4.2 вы можете запускать:

rake db:purge 

Источник: 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

Он может использоваться вместе, как указано выше:

rake db:purge db:create db:migrate RAILS_ENV=test
27
ответ дан 02 янв. '15 в 7:30
источник

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

rake db:create

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

rake db:schema:load

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

24
ответ дан 07 нояб. '10 в 4:29
источник

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

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
11
ответ дан 28 янв. '14 в 10:46
источник

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

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

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

Ура!

11
ответ дан 01 дек. '14 в 13:52
источник

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

rake db:migrate:reset
9
ответ дан 25 нояб. '13 в 15:58
источник

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

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

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

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

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

7
ответ дан 14 окт. '13 в 5:19
источник

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

rake db:drop db:create db:migrate db:seed db:test:clone
6
ответ дан 30 янв. '13 в 18:18
источник

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

На рельсах 4.2 удалить все данные, но сохранить базу данных

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

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

4
ответ дан 08 апр. '15 в 9:48
источник

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

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

3
ответ дан 06 апр. '17 в 5:26
источник

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

rake db:reset
2
ответ дан 01 окт. '13 в 11:10
источник

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

**rake db:reset** it does db:drop, db:setup
 rake db:setup does db:create, db:schema:load, db:seed
1
ответ дан 19 апр. '16 в 10:37
источник

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

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

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

rake db:all

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

1
ответ дан 25 июля '15 в 21:45
источник

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

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

rake db:migrate

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

rake db:reset

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

-- assume_migrated_upto_version(20121026094813, ["/Users/sean/rails/f4/db/migrate"])
0
ответ дан 26 окт. '12 в 14:12
источник

Другие вопросы по меткам или Задайте вопрос