Подтвердить что ты не робот

Потерял мой schema.rb! Может ли он быть регенерирован?

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

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

4b9b3361

Ответ 1

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

bundle exec rake db:schema:dump

Ответ 2

Тщательное,

rake db:schema:dump

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

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

rake db:drop  # ERASES THE DATABASE !!!! 
rake db:create
rake db:migrate

Ответ 3

rake db:schema:dump

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

Ответ 4

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

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

bundle exec rake db:schema:dump

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

Ответ 5

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

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

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

Ответ 6

RAILS 5 Путь:

rails db:schema:dump

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

bundle exec rails db:schema:dump

Примечание:

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

Ответ 7

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

Итак, что я сделал, это удалить все существующие таблицы в базе данных и снова перенести их. Затем команда "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