【问题标题】:Best place to initialize Mongoid in a ruby gem在红宝石中初始化 Mongoid 的最佳位置
【发布时间】:2013-08-14 16:47:51
【问题描述】:

我正在构建一个需要与 MongoDB 通信的 ruby​​ gem。我使用 Mongoid 作为我的客户端驱动程序,我很好奇在 ruby​​ gem 的上下文中初始化的最佳实践是什么。我需要在适当的地方运行以下命令:

Mongoid.load!("path/to/your/mongoid.yml", :production)

问题是在 ruby​​ gem 中执行此操作的最佳位置在哪里,以确保我的 MongoDB 连接在我的代码中可用?

【问题讨论】:

  • 我会使用类似MyGem::Connection 的对象,专门处理连接到 Mongoid DB。更好的是一个常数。对于每个使用连接对象的类/函数,我都会显式地传入连接对象。这样,我不必使用全局变量。那是你要找的吗?还是其他更具体的东西?
  • 我正在寻找更通用的响应,例如构建 ruby​​gem 以放置连接信息的最佳位置、何时​​连接到数据库以及如何在宝石本身。

标签: ruby mongodb rubygems mongoid


【解决方案1】:

在我看来,最好的做法是根本不这样做。

如果您的 ruby​​gem 消费者已经在其应用程序的其他地方使用 Mongoid,会发生什么?当您可以使用现有的客户端实例/mongoid 会话时,您(从他们正在使用的 ruby​​gem 依赖项中)初始化一个额外的客户端实例/mongoid 会话是没有意义的。

我会让您的用户管理他们自己的连接并构建您的库,以便它知道如何设置自己,前提是它提供了一个正常运行的数据库连接。

例如,您可以这样做:

# for rails apps, in config/initializers
YourGem.configure do |config|
  config.client = mongoid_client_instance
end

# for use outside rails
my_instance = YourGem.new(mongoid_client_instance)

在这种情况下,最好避免对他们希望如何初始化外部依赖项或强制他们做出任何决定做出假设。

【讨论】:

    【解决方案2】:

    我会简单地在您的 Gem / Repository 中记录设置信息,并将 Mongoid 作为依赖项添加到您的 .gemspec 中。

    Gem 不应该是侵入性的,配置应该是明显的、易于管理的和有据可查的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-07
      • 1970-01-01
      • 1970-01-01
      • 2011-11-26
      • 2012-06-21
      • 2012-07-09
      相关资源
      最近更新 更多