Потерял мою схему.рб! Это может быть восстановлено? - PullRequest
126 голосов
/ 16 марта 2012

Из-за некоторых проблем с развертыванием я остановил отслеживание schema.rb в git. Каким-то образом я заполнил это и где-то по пути исчез мой файл schema.rb.

Есть ли способ регенерации schema.rb из базы данных или из миграций? Я бы предпочел не потерять существующие данные.

Ответы [ 7 ]

207 голосов
/ 16 марта 2012

Если вы запустите rake -T, в нем будут перечислены все возможные задачи rake для вашего проекта Rails. Один из них - db: schema: dump , который воссоздает schema.rb для приложения Rails из базы данных.

bundle exec rake db:schema:dump
52 голосов
/ 13 марта 2014

Осторожно,

rake db:schema:dump

сбросит текущую схему БД ИЗ БД . Это означает, что если вы внесли какие-либо изменения в свои миграции, они будут НЕ отражены в файле schema.rb, который не соответствует IMO.

Если вы хотите заново создать схему из миграций, сделайте следующее:

rake db:drop  # ERASES THE DATABASE !!!! 
rake db:create
rake db:migrate
11 голосов
/ 16 марта 2012
rake db:schema:dump

Я думаю, что это все еще действует в Rails 3 - он восстанавливает schema.rb из базы данных.

6 голосов
/ 15 марта 2017

RAILS 5 Way:

rails db:schema:dump

или если вы встречаетесь Gem :: LoadError тогда:

bundle exec rails db:schema:dump

Примечание:

в рельсах 5 рекомендуется, чтобы задача генерировалась / выполнялась с использованием rails вместо rake, это просто для запоминания, задача, созданная рельсами, имеет расширение .rake см.в lib/tasks/myTask.rake.это означает, что эти задачи также можно выполнить, добавив rake.

4 голосов
/ 08 августа 2014

Непосредственно из самого файла schema.rb:

Если вам нужно создать базу данных приложения в другой системе, вы должны использовать db:schema:load, а не запускать все миграции с нуля.Последний является некорректным и неустойчивым подходом (чем больше миграций вы накопите, тем медленнее он будет выполняться и тем выше вероятность проблем).

Так что НЕ делайте предложение о rake db:migrate, что было предложено в - на момент написания этой статьи - ответ с самым низким рейтингом.

4 голосов
/ 16 марта 2012

Если вы восстанавливаете schema.rb локально, у вас все будет в порядке.Он просто содержит представление о структуре таблиц вашей базы данных.Сами данные не содержатся в этом файле.

Чтобы восстановить файл schema.rb, выполните:

bundle exec rake db:schema:dump

Затем просто зафиксируйте новый файл schema.rb, и вы должны быть в хорошемформа!

0 голосов
/ 17 октября 2016

У меня также была похожая проблема, когда моя старая схема не обновлялась, даже если я удалил миграцию.

Итак, я удалил все существующие таблицы в базе данных и перенес их снова. Затем команда «db: schema: load» дала мне свежий файл schema.rb.

drop table my_table_name // deleted them indivisully
rake db:migrate
rake db:schema:dump // re-created a new schema
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...