У меня есть база данных dev Ruby on Rails, полная данных. Я хочу удалить все и перестроить базу данных. Я думаю использовать что-то вроде:
rake db:recreate
Возможно ли это?
У меня есть база данных dev Ruby on Rails, полная данных. Я хочу удалить все и перестроить базу данных. Я думаю использовать что-то вроде:
rake db:recreate
Возможно ли это?
Я знаю два способа сделать это:
Это будет reset ваша база данных и перезагрузит вашу текущую схему всеми:
rake db:reset db:migrate
Это уничтожит ваш db, а затем создаст его, а затем перенесет вашу текущую схему:
rake db:drop db:create db:migrate
Все данные будут потеряны в обоих сценариях.
В Rails 4 все необходимое
$ rake db:schema:load
Это приведет к удалению всего содержимого вашей БД и воссозданию схемы из файла schema.rb, без необходимости применять все миграции один за другим.
Я использую следующий вкладыш в Терминале.
$ 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+
Обновление: в 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
В зависимости от того, что вы хотите, вы можете использовать...
rake db:create
... для создания базы данных с нуля с config/database.yml
или...
rake db:schema:load
... для создания базы данных с нуля из вашего файла schema.rb
.
В командной строке выполните
rake db:migrate:reset
Просто выполните последовательность шагов: отбросьте базу данных, затем заново создайте ее, перенесите данные и, если у вас есть семена, заселите базу данных:
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
Использовать как
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
сделать все сразу.
Ура!
Вы можете сделать вручную:
rake db:drop
rake db:create
rake db:migrate
Или просто rake db:reset
, который выполнит вышеуказанные шаги, но также запустит ваш файл db/seeds.rb
.
Добавленный нюанс заключается в том, что rake db:reset
загружается непосредственно из вашего файла schema.rb
, а не снова запускает все файлы миграции.
Данные удаляются во всех случаях.
Вы можете использовать следующую командную строку:
rake db:drop db:create db:migrate db:seed db:test:clone
Чтобы удалить определенную базу данных, вы можете сделать это на консоли 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.2 удалить все данные, но сохранить базу данных
$ bin/rake db:purge && bin/rake db:schema:load
https://github.com/rails/rails/blob/4-2-stable/activerecord/CHANGELOG.md
Вы можете использовать
db:reset
- для запуска db: drop и db: настройка или
db:migrate:reset
- выполняется db: drop, db: create и db: migrate.
зависит от того, что вы хотите использовать, существует schema.rb
В соответствии с Rails guide, этот один лайнер должен использоваться, потому что он будет загружаться из schema.rb
вместо перезагрузки файлов миграции один на один:
rake db:reset
Поскольку в разработке вы всегда хотите воссоздать базу данных, вы можете определить задачу рейка в своей папке lib/tasks.
namespace :db do
task :all => [:environment, :drop, :create, :migrate] do
end
end
а в терминале вы запустите
rake db:all
он восстановит вашу базу данных
Я думаю, что лучший способ запустить эту команду:
**rake db:reset** it does db:drop, db:setup
rake db:setup does db:create, db:schema:load, db:seed
Просто ты можешь бежать
rake db:setup
Он удалит базу данных, создаст новую базу данных и заполнит базу данных из начального числа, если вы создали исходный файл с некоторыми данными.
Сегодня я сделал немало изменений в моей схеме рельсов. Я понял, что мне нужны еще две модели в иерархии, а некоторые другие - для удаления. Для моделей и контроллеров потребовалось много небольших изменений.
Я добавил две новые модели и создал их, используя:
rake db:migrate
Затем я редактировал файл schema.rb. Я вручную удалил старые модели, которые больше не нужны, изменил поле внешнего ключа по мере необходимости и немного изменил его порядок, чтобы сделать его более ясным для меня. я удалил все миграции, а затем повторно запустил сборку через:
rake db:reset
Это сработало отлично. Разумеется, все данные должны быть перезагружены. Рельсы поняли, что миграции были удалены, и reset знак высокой воды:
-- assume_migrated_upto_version(20121026094813, ["/Users/sean/rails/f4/db/migrate"])
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
Заметки: