【问题标题】:Why does rake db:migrate in Rails not add functions to the schema file?为什么 rake db:migrate 在 Rails 中不向模式文件添加函数?
【发布时间】:2010-10-31 11:07:19
【问题描述】:

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

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

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

感谢您的帮助和回复,

-迈克·特雷西奇

【问题讨论】:

    标签: ruby-on-rails migration rake


    【解决方案1】:

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

    config.active_record.schema_format = :sql
    

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

    mysqldumpdoesn't support dumping stored procedures 5.0.13 之前的版本。

    我环顾了 Rails 灯塔,但在那里寻找公开门票的难度远远超过应有的难度。如果没有其他人对此提出错误,您可能会考虑这样做,但如果没有补丁,则不太可能有人会处理它。

    【讨论】:

    • 史蒂夫,你找到了我找不到的所有信息。非常感谢,很高兴终于有了答案。
    • 我更喜欢看 :ruby 格式。我希望有一种方法可以指定每次从 schema.rb 加载数据库时自动运行的特定迁移。
    猜你喜欢
    • 1970-01-01
    • 2014-01-31
    • 2016-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多