2009-06-04 4 views
13

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

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

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

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

-Mike Trpcic

ответ

12

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

config.active_record.schema_format = :sql 

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

mysqldumpdoesn't support dumping stored procedures до версии 5.0.13.

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

+1

Стив, вы нашли всю информацию, которую я не мог. Спасибо тонну, приятно наконец получить ответ. –

+0

Я предпочитаю смотреть на: рубиновый формат. Хотелось бы, чтобы можно было указать конкретные миграции для запуска автоматически каждый раз, когда база данных загружается из schema.rb. –