Почему rake db: migrate в Rails не добавляет функции в файл схемы? - PullRequest
13 голосов
/ 04 июня 2009

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

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

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

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

- Майк Трпчич

1 Ответ

12 голосов
/ 05 июня 2009

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, но поиск открытых билетов там намного сложнее, чем следовало бы. Если никто не подал ошибку по этому поводу, вы можете подумать об этом, хотя без патча вряд ли кто-то поработает над этим.

...