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

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

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

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

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

-Mike Trpcic

Ответы

Ответ 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.

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