【问题标题】:Rails generating development_structure.sql - order of dumpRails 生成 development_structure.sql - 转储顺序
【发布时间】:2012-12-21 05:01:38
【问题描述】:

我正在使用 Rails 3.2.8 并且有

config.active_record.schema_format = :sql 

在我的 config/application.rb 中。

在 Oracle 11g 数据库中,我定义了一个表,其中包含依赖于用户定义函数的虚拟列:

CREATE TABLE BAR (
  ID NUMBER(19,0) NOT NULL,
  STATUS NUMBER(19, 0) DEFAULT 1,
  CALCULATED_STATUS NUMBER(19,0) GENERATED ALWAYS AS (MY_FUNCTION(STATUS)) VIRTUAL)

当 Rake 执行 db:test:clone_structure(任务:TOP => default => spec => db:test:clone_structure)时,我正在打:

OCIError: ORA-00904: "FOO"."MY_FUNCTION": 无效标识符:CREATE TABLE "BAR" (...

我认为发生的事情是 db:structure:dump 在函数之前导出表,因此在 development_structure.sql 中,CREATE FUNCTION MY_FUNCTION 出现在 CREATE TABLE BAR 语句之后。

我必须进去monkeypatch db:structure:dump 是如何工作的吗?

谢谢。

【问题讨论】:

  • 我发现 Rails 模式转储程序非常幼稚,很容易被任何不是表的东西混淆。我不得不对其进行大量补丁来处理触发器、视图和全文索引,而不会完全爆炸。不过,我希望你能找到一个标准的解决方案。
  • 您通常在哪里制作补丁?我一直在寻找解决这个问题的方法,但我不断发现自己得出了同样的结论。
  • 第一步是创建一个可以完成这项工作的config/initializer 文件。如果它有效并且您想将其形式化,请将其转换为成熟的 gem。
  • 我最终在github.com/rsim/oracle-enhanced 中找到了适用的源代码,并在我插入配置/初始化程序的文件中覆盖了 structure_dump 和 structure_dump_db_stored_code 方法。
  • 如果您对此有答案,您可能希望发布并接受它以供后代使用。

标签: ruby-on-rails activerecord oracle11g


【解决方案1】:

我最终在 github.com/rsim/oracle-enhanced 中找到了适用的源代码,并在我放入 config/initializers 的文件中覆盖了 structure_dump 和 structure_dump_db_stored_code 方法。

【讨论】:

    猜你喜欢
    • 2014-04-27
    • 1970-01-01
    • 1970-01-01
    • 2011-01-05
    • 2015-10-06
    • 1970-01-01
    • 1970-01-01
    • 2019-10-09
    • 1970-01-01
    相关资源
    最近更新 更多