0

I am building a ruby gem which will require communication with MongoDB. I am using Mongoid as my client driver and I am curious what the best practice is in as far as initializing within the context of a ruby gem. I need to run the following somewhere appropriate:

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

The question is where is the best place to do this in a ruby gem in order to ensure my MongoDB connection is available throughout my code?

4

2 回答 2

0

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

如果您的 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)

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

于 2013-08-15T18:52:59.727 回答
0

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

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

于 2013-08-20T07:19:36.170 回答