在一个进程多个数据库连接 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) 客户端断开连接

Sinatra,上传表单中的进度条

Sinatra/Rails:在应用程序生命周期内保持自定义类实例

SQLAlchemy 和多个进程的连接问题

如何在经典 sinatra 应用程序中配置omniauth 使用memcached 作为谷歌的后备存储?