Очистка или воссоздание базы данных 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: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"])