我的库使用Gem动态加载库。例如,如果我选择sqlite适配器,它会加载'sqlite3'。
问题是,如果我在我的图书馆写作
require 'bundler'
Bundler.setup
它停止查看使用rubygems安装的gem,并且只使用Bundler查看为此特定lib安装的gem。因此
require 'sqlite3'
导致异常:
`require': LoadError: cannot load such file -- sqlite3
有没有办法解决这个问题而不将sqlite3添加到我自己的Gemfile中?
我应该指出,这个问题似乎与sqlite3无关,而是与Bundler行为有关。选择sqlite3只是因为那是我所需要的宝石,帮助我发现了这个问题。
答案 0 :(得分:2)
当您使用Bundler.setup时,它会显式更改您的加载路径,因此您只能使用Gemfile中指定的gem。这是一种理想的行为,可确保您不使用您在Gemfile中未指定的任何内容,并防止意外的依赖性冲突。
当动态加载gems时,你应该使用require false选项:
gem "sqlite3", :require => false
这将导致bundler安装sqlite3,但只在需要时才需要它。