Сначала я сошлюсь на некоторую документацию по Rails, которая может быть более полезной.Эта документация о заданных по умолчанию рейк-задачах Rails, которые используют методы, о которых вы спрашивали:
Типы дампов схемы Rails (Направляющие рельсов Rails)
Полагаю, вызнакомы с файлом Rails db/schema.rb
.Этот файл по сути является большим «миграционным» файлом, который содержит некоторый код Ruby, который можно запустить, который создаст все необходимые таблицы и индексы в вашей базе данных.Это то, что происходит, когда вы запускаете rake db:schema:load
.
. Мы можем использовать rake db:schema:dump
, чтобы по существу взять состояние базы данных и перевести его непосредственно в файл schema.rb
.Нам может потребоваться сделать это, если у нас нет файлов миграции, и у нас нет существующего файла schema.rb
.В некоторых случаях (не очень много) ActiveRecord испытывает проблемы с правильным «преобразованием» схемы базы данных непосредственно в код Ruby.ActiveRecord не может переводить определенные функции / опции, включая, но не ограничиваясь:
structure_dump
и сопутствующее ему рейк-задание db:structure:dump
существуют для решения этой проблемы.Вместо того, чтобы запрашивать у адаптера базы данных ActiveRecord дамп в файл schema.rb
, содержащий код Ruby, он вместо этого использует базовые инструменты управления базой данных для дампа в файл structure.sql
, содержащий большой список операторов SQL.Обычно проще «представить» схему базы данных в необработанном SQL, вместо того чтобы сначала переводить ее в код Ruby.Полученный файл structure.sql
теперь можно использовать для воссоздания схемы / структуры базы данных одним из двух способов:
Запустить содержимое db/structure.sql
в приглашении SQL или в некоторыхпуть, который напрямую оценивается вашей системой управления базами данных
Запустите грабли db:structure:load
.Он будет читать из db/structure.sql
и оценивать его содержимое как необработанный SQL, но через ActiveRecord - очень похоже на db:schema:load
.
TLDR: ИногдаActiveRecord сложно выгружать схему непосредственно в код Ruby, поэтому structure_dump
позволяет создавать дамп в сыром SQL.Этот SQL можно запустить для воссоздания схемы базы данных так же, как и schema.rb
для воссоздания схемы базы данных.Вы можете загрузить его в базу данных как сырой SQL или запустив задачу rake db:structure:load
.