我正在构建一个需要与MongoDB通信的ruby gem。我使用Mongoid作为我的客户端驱动程序,我很好奇在ruby gem的上下文中初始化是什么最好的做法。我需要在适当的地方运行以下内容:
Mongoid.load!("path/to/your/mongoid.yml", :production)
问题是在ruby gem中执行此操作的最佳位置在哪里,以确保我的代码中可以使用MongoDB连接?
答案 0 :(得分:0)
在我看来,最佳做法是你根本不这样做。
如果你的rubygem的消费者已经在他们的应用程序的其他地方使用Mongoid会发生什么?当你可以使用现有的客户端实例/ mongoid会话时,对你(从他们正在使用的rubygem依赖关系中)初始化一个额外的客户端实例/ 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)
在这种情况下,最好避免假设他们想要初始化外部依赖关系或强制做出任何决定。
答案 1 :(得分:0)
我只需记录您的Gem / Repository中的设置信息,并将Mongoid作为依赖项添加到.gemspec中。
宝石不应该是侵入性的,配置应该是明显的,可管理的并且记录良好。