13

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

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

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

感谢您的任何帮助和回复,

-迈克·特雷西奇

4

1 回答 1

12

schema.rb是 Ruby 模式格式,它不支持函数或许多其他更高级的特性。将格式更改为纯 SQL (in environment.rb),您应该一切顺利。

config.active_record.schema_format = :sql

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

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

我环顾了 Rails 灯塔,但在那里寻找公开门票比应有的困难得多。如果没有其他人为此提交错误,您可能会考虑这样做,尽管没有补丁,不太可能有人会处理它。

于 2009-06-04T20:00:56.957 回答