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

时间:2009-06-04 19:46:02

标签: ruby-on-rails migration rake

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

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

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

感谢您提供任何帮助和回复,

-Mike Trpcic

1 个答案:

答案 0 :(得分:12)

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

config.active_record.schema_format = :sql

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

版本5.0.13之前的

mysqldump doesn't support dumping stored procedures

我环顾了Rails灯塔,但寻找开放的门票远比它应该更难。如果没有其他人对此提出过错误,你可能会考虑这样做,但如果没有补丁,那么任何人都不可能继续使用它。