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

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

rake db:recreate

это возможно?

18 ответов


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

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

rake db:reset db:migrate

это уничтожит вашу БД, а затем создаст ее, а затем перенесет текущую схему:

rake db:drop db:create db:migrate

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


на рельсах 4, все необходимое

$ rake db:schema:load

это удалит все содержимое вашей БД и воссоздаст схему из вашей схемы.RB-файл, без необходимости применять все миграции один за другим.


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

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

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

Теперь вы можете легко "цеплять" рельсы задачи:

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

Update: с появлением Rails 5 эта команда будет доступна через эту команду:

rails db:очистить db:создать db: перенести RAILS_ENV=test


начиная с новейшей версии rails 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

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

rake db:create

...построить базу данных с нуля из config/database.yml, или...

rake db:schema:load

...построить базу данных с нуля из вашего .


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

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

С среды по умолчанию для rake is развитие, в случае, если вы видите исключение в тестах спецификаций, вы должны повторно создать БД для тест окружающая среда следующим образом:

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

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

rake db:migrate:reset

как

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

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

db: drop - падение базы данных.

db: create - создать базу данных (host/db/password будет взят из конфигурации / базы данных.в формате YML)

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

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

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

rake db:reset

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

Ура!


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

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

или просто rake db:reset, который будет запускать вышеуказанные шаги, но также будет запускать ваш .

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

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


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

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: setup или db:migrate:reset - который запускает db:drop, db:create и db: migrate.

dependent at вы хотите использовать схему exist.rb


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

rake db:reset

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

он отбросит базу данных, создаст новую базу данных и заполнит БД из seed, если вы создали файл seed с некоторыми данными.


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

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

rake db:migrate

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

rake db:reset

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

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