Почему rake db:migrate в Rails не добавляет функции в файл схемы?

Недавно я добавил некоторые функции SQL в свою базу данных с помощью миграции, и они отлично работают. Код работает, база данных работает, тесты нет. Файл schema.rb сообщает мне, что это последняя версия (и это правильно), но он содержит только определения для таблиц и индексов, а не функции, которые я добавил.

Я добавил функции с помощью метода «execute()» в свою миграцию и нуждаюсь в них в тестовой базе данных для прохождения тестов RSpec (политика компании предписывает, что я не могу зафиксировать эти изменения, пока это не будет исправлено).

Кто-нибудь знает, почему это происходит, или как это исправить? Я могу вручную войти в командную строку MySQL и добавить функции, но тогда они будут удалены, когда в следующий раз кто-то выполнит db:test:prepare. Мне нужно решение, которое можно автоматизировать.

Спасибо за любую помощь и ответы,

-Майк Трпчич


person Mike Trpcic    schedule 04.06.2009    source источник


Ответы (1)


schema.rb — это формат схемы Ruby, и он не поддерживает функции или многие другие дополнительные функции. Измените формат на простой SQL (в environment.rb), и все будет хорошо.

config.active_record.schema_format = :sql

Правка: после комментария Майка я немного покопался. Задача Rake для сброса вызовов схемы в адаптер подключения ActiveRecord для MySQL и Oracle. MySQL не очень умен и только сбрасывает структуру таблицы, игнорируя все остальное. PostgreSQL, SQLite, SQL Server и Firebird обращаются к исполняемому файлу, предоставленному поставщиком.

mysqldump не поддерживает создание дампа хранимых процедур до версии 5.0.13.

Я осмотрел Маяк Рейлс, но найти там открытые билеты гораздо сложнее, чем должно быть. Если никто еще не сообщил об ошибке, вы можете подумать об этом, хотя без патча маловероятно, что кто-то будет работать над этим.

person Steve Madsen    schedule 04.06.2009
comment
Стив, ты нашел всю информацию, которую я не смог найти. Большое спасибо, приятно наконец получить ответ. - person Mike Trpcic; 15.06.2009
comment
Я предпочитаю смотреть на формат :ruby. Хотелось бы, чтобы был способ указать, какие миграции будут запускаться автоматически каждый раз, когда база данных загружается из schema.rb. - person Mark Schneider; 12.08.2013