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

Является ли rake db: перенаправить правильную команду для повторной синхронизации schema.rb с вашей схемой базы данных?

Я запускал "rake db: migrate" для повторной синхронизации schema.db с моей схемой базы данных. Но это провалилось, сказав, что одна из моих таблиц уже существует. Я думаю, он пытался воссоздать таблицу. Если вы просто хотите обновить schema.rb, чтобы отразить любые изменения, внесенные в базу данных независимо от Rails, какую команду вы должны использовать, если не "rake db: migrate"? И какой лучший источник документации по этому типу?

4b9b3361

Ответ 1

"rake db: migrate" попытается выполнить все выдающиеся миграции для вашего проекта. Если вы просто хотите сбросить схему, выполните "rake db: schema: dump".
Но я думаю, что у вас есть проблема, когда говорится, что таблица уже существует. Одна из ваших миграций терпит неудачу, потому что таблица, которую она пытается добавить, уже существует в вашем db. Вы создали его вручную? У вас была миграция, но не было написано для этого? Вам нужно будет исправить это, прежде чем вы сможете писать будущие миграции. Если это просто ошибка, и таблица есть и правильная, и вы хотите проигнорировать это. Моя рекомендация состоит в том, чтобы взломать его, комментируя таблицу создания при неудачной миграции. Затем запустите "rake db: migrate". Затем создайте таблицу. Это обновит вашу версию схемы.
Убедитесь, что вы написали правильные сокращения во всех миграциях.

Ответ 2

Try

RAILS_ENV=development rake db:drop

перед

RAILS_ENV=development rake db:migrate

и будьте счастливы!

Убедитесь, что вы запустили его в тестовой среде или среде разработки, так как это приведет к удалению базы данных/таблиц

Ответ 3

Я обнаружил, что иногда, когда ситуация становится немного странной, вы окажетесь в ситуации, когда Rails захочет запустить миграцию, которую он должен правильно рассмотреть (уже существует таблица и т.д.), Вы можете отметить миграцию, выполнив ее поиск (номер числа в начале имени файла), перейдя в mysql и выдав такой запрос:

insert into schema_migrations values('20090521153438');

(или какой бы ни был номер вашей миграции)

Или если это миграция плагина выполняется с помощью Desert migrate_plugin:

insert into plugin_schema_migrations values('my_plugin', '005');

Ответ 4

rake db:migrate:reset удалит все ваши таблицы, запустит все миграции и создаст новый файл schema.rb.

Ответ 5

Попробуйте rake db:schema:dump или rake db:migrate:redo.

Ответ 6

Используйте rake db:schema:dump.

$ rake -T | grep schema
rake db:schema:dump # Create a db/schema.rb file that is portable
                    #  against any database supported by ActiveRecord

rake db:schema:dump повторно создает файл db/schema.rb, не перезапуская какие-либо из ваших миграций, или не удаляет любые таблицы (что подразумевает потерю данных в этих таблицах), поэтому это наименее инвазивный способ, который вы можете попробовать первым.