У меня есть база данных dev Ruby on Rails, полная данных. Я хочу удалить все и восстановить базу данных. Я думаю об использовании чего-то вроде:
rake db:recreate
Это возможно?
ruby-on-rails
ruby-on-rails-3
rake
AnApprentice
источник
источник
rake db:drop db:create db:schema:load
может быть более подходящим, чемrake db:drop db:create db:migrate
(хотя я готов ошибаться в этом).rake db:drop db:create db:migrate
db:drop + db:create + db:migrate == db:migrate:reset
, Я обычно прибегаю к томуdb:schema:load
, когда миграции нарушаются. Мне редко нужно воссоздавать базу данных, поэтому скорость не имеет большого значения. Кроме того, если у вас есть непримененные миграции,db:schema:load
иdb:reset
вы не будете их применять. Не уверен, что это большая часть аргумента.Ответы:
Я знаю два способа сделать это:
Это сбросит вашу базу данных и перезагрузит вашу текущую схему со всеми:
Это уничтожит вашу базу данных, затем создаст ее и затем перенесет вашу текущую схему:
Все данные будут потеряны в обоих сценариях.
источник
rake db:reset
также запускает все миграции (по крайней мере, на Rails 3), так что это должно быть все, что нужно, верно?rake db:test:prepare
тестирование, иначе вы получите сообщение об ошибке:Could not find table 'things' (ActiveRecord::StatementInvalid)
rake db:reset
иrake db:drop db:create db:migrate
сделать две совершенно разные вещи . Последний стирает всю базу данных приложения, воссоздает ее и затем проходит каждую миграцию, чтобы обновить схему (db/schema.rb
илиdb/structure.sql
), но не заполняет ее начальными данными. Первый вместо этого - псевдоним дляrake db:drop db:schema:load db:seed
, поэтому он стирает всю базу данных приложения, но не обновляет схему , а затем заполняет начальными данными. Таким образом, если вы ничего не изменили в своих миграциях, первое быстрее, второе безопаснее.На Rails 4 все необходимое
Это приведет к удалению всего содержимого вашей БД и воссозданию схемы из файла schema.rb без необходимости применения всех миграций один за другим.
источник
db:drop
иdb:create
был излишним.Я использую следующий вкладыш в Терминале.
Я положил это как псевдоним оболочки и назвал его
remigrate
К настоящему времени вы можете легко «связать» задачи Rails:
источник
db:reset
, который находится всего в Google (или проверить руководства ). Мой комментарий не для того, чтобы советовать против этого, а для того, чтобы не использоватьdb:migrate
то, что вам действительно нужноdb:schema:load
.rake
, например:rake db:drop db:create db:schema:load
.db:migrate
... в то время какdb:schema:load
он чувствителен к тому, что кто-то забыл проверить schema.rb в системе контроля версий вместе с новой миграцией.Обновление: в Rails 5 эта команда будет доступна через эту команду:
rails db:purge db:create db:migrate RAILS_ENV=test
Начиная с новейшей версии rails 4.2, вы можете запустить:
Источник: коммит
Его можно использовать вместе, как указано выше:
источник
db:purge
«удали все данные, но сохрани все таблицы и столбцы»db:purge
не сохраняю таблицы.В зависимости от того, что вы хотите, вы можете использовать ...
rake db:create
... для создания базы данных с нуля
config/database.yml
, или ...rake db:schema:load
... создать базу данных с нуля из вашего
schema.rb
файла.источник
Из командной строки запустите
источник
schema.rb
и если вы толькоdrop
иcreate
,migrate
ничего не будете делать (проверено на рельсах 6)Используйте как
Все в одной строке. Это быстрее, поскольку среда не перезагружается снова и снова.
db: drop - удалит базу данных
db: create - создаст базу данных (хост / db / пароль будет взят из config / database.yml)
db: migrate - запустит существующие миграции из каталога (db / igration / .rb) *.
db: seed - будет запускать возможные данные из каталога (db /igration / seed.rb) .
Я обычно предпочитаю:
сделать все сразу.
Ура!
источник
db:reset == db:drop + db:schema:load + db:seed
,db:migrate:reset == db:drop + db:create + db:migrate
Просто выполните последовательность шагов: удалите базу данных, затем заново создайте ее, перенесите данные, и, если у вас есть семена, посейте базу данных:
Так как среда по умолчанию для разработки
rake
- разработка , в случае, если вы видите исключение в тестах спецификаций, вы должны заново создать db для тестовой среды следующим образом:В большинстве случаев тестовая база данных высевается во время тестовых процедур, поэтому выполнение
db:seed
задачи не требуется. В противном случае вы должны подготовить базу данных:или
Кроме того, чтобы использовать задачу воссоздания, вы можете добавить в Rakefile следующий код:
Тогда выпустите:
источник
Вы можете вручную сделать:
Или просто
rake db:reset
, который запустит вышеуказанные шаги, но также запустит вашdb/seeds.rb
файл.Дополнительный нюанс заключается в том, что
rake db:reset
загружается прямо из вашегоschema.rb
файла, а не снова запускает все файлы миграции.Ваши данные сдуваются во всех случаях.
источник
Вы можете использовать эту следующую командную строку:
источник
Чтобы удалить конкретную базу данных, вы можете сделать это на консоли rails:
А затем снова перенести БД
источник
На рельсах 4.2, чтобы удалить все данные, но сохранить базу данных
https://github.com/rails/rails/blob/4-2-stable/activerecord/CHANGELOG.md
источник
Вы можете использовать
db:reset
- для запуска db: drop и db: setup или - для запуска db:db:migrate:reset
drop, db: create и db: migrate.зависимые у вас хотят использовать существующую schema.rb
источник
Согласно руководству по Rails , этот лайнер следует использовать, потому что он будет загружаться
schema.rb
вместо загрузки файлов миграции один за другим:источник
Поскольку в процессе разработки вы всегда захотите воссоздать базу данных, вы можете определить задачу rake в своей папке lib / tasks следующим образом.
и в терминале вы побежите
это восстановит вашу базу данных
источник
Я думаю, что лучший способ выполнить эту команду:
источник
Просто ты можешь бежать
rake db:setup
Он удалит базу данных, создаст новую базу данных и заполнит базу данных из начального числа, если вы создали исходный файл с некоторыми данными.
источник
3 варианта, тот же результат:
1. Все шаги:
2. Сброс:
3. Миграция: сброс:
Ноты:
источник
Сегодня я внес несколько изменений в мою схему рельсов. Я понял, что мне нужно две дополнительные модели в иерархии и некоторые другие, которые нужно удалить. Было много небольших изменений, необходимых для моделей и контроллеров.
Я добавил две новые модели и создал их, используя:
Затем я отредактировал файл schema.rb. Я вручную удалил старые модели, которые больше не нужны, изменил поле внешнего ключа по мере необходимости и просто переупорядочил его, чтобы сделать его более понятным для меня. Я удалил все миграции, а затем снова запустил сборку через:
Это сработало отлично. Все данные должны быть перезагружены, конечно. Рельсы поняли, что миграции были удалены, и сбросили верхнюю отметку:
источник