0

我的库使用动态加载库的 Gem。例如,如果我选择一个 sqlite 适配器,它会加载“sqlite3”。

问题是,如果我在我的图书馆里写

require 'bundler'
Bundler.setup

它不再看到使用 ruby​​gems 安装的 gem,只看到使用 Bundler 为这个特定库安装的那些。因此

require 'sqlite3'

导致异常:

`require': LoadError: cannot load such file -- sqlite3

有没有办法在不将 sqlite3 添加到我自己的 Gemfile 的情况下解决这个问题?

我应该指出,这个问题似乎与 sqlite3 无关,而是与 Bundler 行为有关。选择 sqlite3 只是因为它是我需要的 gem,它帮助我发现了这个问题。

4

1 回答 1

2

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

动态加载 gem 时,您应该使用 require false 选项:

gem "sqlite3", :require => false

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

请参阅Bundler Gemfile 手册

于 2014-09-15T13:34:35.750 回答