为什么Rails db:migrate在Rails中没有向模式文件中添加函数?

我最近通过迁移向我的数据库添加了一些SQL函数,它们工作得很好。 代码工作,数据库工作,测试没有。 schema.rb文件告诉我它是最新版本(并且它是正确的),但它只包含表和索引的定义,而不是我添加的函数。

我在迁移中通过“execute()”方法添加了这些函数,并且需要在测试数据库中将它们传递给RSpec测试(公司策略规定在修复之前我不能提交此更改)。

有谁知道为什么会这样,或者如何解决它? 我可以手动进入MySQL命令行并添加函数,但是下次有人执行db:test:prepare时它们会被删除。 我需要一个可以自动化的解决方案。

感谢您的帮助和回复,

-Mike Trpcic

schema.rb是Ruby模式格式,它不支持函数或许多其他更高级的function。 将格式更改为纯SQL(在environment.rb ),您应该很高兴。

 config.active_record.schema_format = :sql 

编辑:在Mike的评论之后,我做了一些挖掘。 Rake任务将模式调用转储到MySQL和Oracle的ActiveRecord连接适配器。 MySQL不是很聪明,只会转储表结构,忽略其他所有内容。 PostgreSQL,SQLite,SQL Server和Firebird调用供应商提供的可执行文件。

mysqldump 不支持在5.0.13之前转储存储过程 。

我环顾了Rails灯塔,但是寻找开放的门票远比它应该更难。 如果没有其他人对此提出过错误,你可能会考虑这样做,虽然没有补丁,但是不太可能有人会对它进行处理。