【问题标题】:Using an in-memory database within a gem在 gem 中使用内存数据库
【发布时间】:2012-03-23 12:08:37
【问题描述】:

我正在编写一个 gem,它可以对 plist 文件进行一些复杂的解析/组合。

我认为为此使用 ActiveRecord 接口并将“结构”构建为内存数据库是有意义的。

宝石本身就可以正常工作。但是,我希望能够将它合并到 Rails 项目中。问题是我的 gem 在 ActiveRecord::Base 上调用了建立连接,这会终止 Rails 应用程序之前的任何连接。

这似乎是可能的,因为 ActiveRecord::Base 文档中有一段标题为:Connection to multiple databases in different models

这意味着您可以从 ActiveRecord::Base 子类化并在其上调用建立连接。那么问题是您无法定义您的架构,因为 ActiveRecord::Schema.define 使用当前在 Base 上设置的连接。

我认为这样做的唯一方法可能是将表构建到包含 gem 的 Rails 应用程序中。如果我能帮上忙,我宁愿不走那条路。有什么想法吗?

如果我没有说清楚,您可以查看我的 gem here 的数据库设置文件。

非常感谢

【问题讨论】:

  • 是否有任何更改来覆盖建立连接?让它什么都不做?
  • 大多数需要您在数据库中有特定表的 gem 都需要用户创建这些表。我认为在应用程序的数据库中随心所欲地创建表是非常糟糕的。 (除非它们是临时表)

标签: mysql ruby-on-rails ruby sqlite gem


【解决方案1】:

感谢 cmets。 Andrew Marshall:在这种情况下,我的表是临时的,仅供内存使用。

我想出了一个可能对偶然发现此问题的人有用的解决方案: Switching connection on ActiveRecord::Schema

再次感谢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-01
    • 2017-09-23
    • 1970-01-01
    • 2013-11-05
    • 2015-01-26
    相关资源
    最近更新 更多