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