在一个进程多个数据库连接 sinatra 应用程序中使用啥 ORM?
Posted
技术标签:
【中文标题】在一个进程多个数据库连接 sinatra 应用程序中使用啥 ORM?【英文标题】:What ORM to use in one process multiple db connections sinatra application?在一个进程多个数据库连接 sinatra 应用程序中使用什么 ORM? 【发布时间】:2010-04-14 18:19:42 【问题描述】:已检查 ActiveRecord、DataMapper、Sequel:有些使用全局变量(静态变量),有些需要在使用模型加载源文件之前打开数据库连接。在使用不同数据库的 sinatra 应用程序中使用哪种 ORM 更好。
【问题讨论】:
【参考方案1】:DataMapper 专为多数据库使用而设计。
您只需说出DataMapper.setup(:repository_one, "mysql://localhost/my_db_name")
之类的内容即可设置多个存储库。
DataMapper 然后跟踪所有已在哈希中设置的存储库,您可以引用并用于范围界定:
DataMapper.repository(:repository_one) MyModel.all
(默认范围就是DataMapper.repository,可以通过DataMapper.setup(:default, "postgres://localhost/my_primary_db")
等来设置)
【讨论】:
官方文档可以在datamapper.org/docs/misc.html找到。如果您不指定上下文/存储库,则采用:default
之一。你至少应该有这样的上下文。【参考方案2】:
似乎可以在大多数 ORM 中使用不同的数据库。 对于 DataMapper,请查看 knowtheory 答案。 对于 Sequel,您可以将数据库处理程序传递给模型:
class Tag < Sequel::Model(db)
end
其中 db 是打开的数据库。 对于 ActiveRecord,您可以使用建立连接方法。
【讨论】:
【参考方案3】:就我个人而言,我更喜欢 Sequel 来访问我的所有 ORM 和基本数据库访问,并且我在 Sinatra/Padrino 以及任何其他需要访问 Rails 之外的数据库时都使用它。
我使用过 DataMapper,但觉得 Sequel 更简单、更灵活,但也许这正是我的想法。 ActiveRecord 本身就可以,但我认为它与 Rails 结合使用效果最好。
哪个“更好”?我认为这是主观的,主要与你的大脑如何工作有关。
【讨论】:
以上是关于在一个进程多个数据库连接 sinatra 应用程序中使用啥 ORM?的主要内容,如果未能解决你的问题,请参考以下文章
Sinatra,Puma,ActiveRecord:没有找到“主要”的连接池
Heroku 上的 Sinatra/Thin 未检测到 HTTP 流连接 (SSE) 客户端断开连接