Bundler.setup与加载路径混淆

时间:2014-09-14 05:46:09

标签: ruby rubygems bundler load-path

我的库使用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只是因为那是我所需要的宝石,帮助我发现了这个问题。

1 个答案:

答案 0 :(得分:2)

当您使用Bundler.setup时,它会显式更改您的加载路径,因此您只能使用Gemfile中指定的gem。这是一种理想的行为,可确保您不使用您在Gemfile中未指定的任何内容,并防止意外的依赖性冲突。

当动态加载gems时,你应该使用require false选项:

gem "sqlite3", :require => false

这将导致bundler安装sqlite3,但只在需要时才需要它。

请参阅Bundler Gemfile manual