Відповіді:
Якщо ви запустили, rake -T
він перерахує всі можливі завдання граблі для вашого проекту Rails. Один з них - db: schema: dump, який відтворить schema.rb для програми Rails з бази даних.
bundle exec rake db:schema:dump
rake db:schema:dump
на рейках 2.0
Обережно,
rake db:schema:dump
скидає поточну схему БД З БД . Це означає, що якщо ви внесли якісь зміни в міграції, вони НЕ будуть відображені у файлі schema.rb, який не є тим, що потрібно IMO.
Якщо ви хочете заново створити схему з міграцій, виконайте наступне:
rake db:drop # ERASES THE DATABASE !!!!
rake db:create
rake db:migrate
rake db:schema:dump
команду.
ЗАЛІЗНИКИ 5 Шлях:
rails db:schema:dump
або якщо Ви знайдете Gem :: LoadError, тоді:
bundle exec rails db:schema:dump
Примітка:
у рейках 5 рекомендується створювати / виконувати завдання за допомогою rails
замість rake
, це просто пам'ятати, рейки генеруватися завдання мають розширення .rake
см в lib/tasks/myTask.rake
. що означає, що ці завдання також можна виконати заздалегідь rake
.
Якщо ви регенеруєте schema.rb
місцево, ви повинні бути добре. Він просто містить представлення структури таблиць вашої бази даних. Самі дані не містяться в цьому файлі.
Щоб відновити schema.rb
файл, запустіть:
bundle exec rake db:schema:dump
Тоді просто введіть новий schema.rb
файл, і ви повинні бути в хорошій формі!
Безпосередньо з самого файлу schema.rb:
Якщо вам потрібно створити базу даних додатків в іншій системі, ви повинні використовувати
db:schema:load
, не виконуючи всі міграції з нуля. Останнє - це хибний і нестійкий підхід (чим більше міграцій ви накопичите, тим повільніше буде виконуватись і більша ймовірність виникнення проблем).
Тому НЕ робіть пропозицію rake db:migrate
, яка була запропонована в момент написання цього запису - найнижчою оцінкою.
У мене також була подібна проблема, коли моя стара схема не оновлювалась, навіть якщо я видалив міграцію.
Отже, те, що я зробив, було скидання всіх існуючих таблиць у базу даних та перенесення їх знову. Потім команда "db: schema: load" дала мені свіжу schema.rb.
drop table my_table_name // deleted them individually
rake db:migrate
rake db:schema:dump // re-created a new schema