0

私のライブラリは、ライブラリを動的にロードする Gem を使用しています。たとえば、sqlite アダプターを選択すると、「sqlite3」が読み込まれます。

問題は、ライブラリに書き込む場合です

require 'bundler'
Bundler.setup

rubygems でインストールされた gem は表示されなくなり、Bundler を使用してこの特定の lib 用にインストールされた gem のみが表示されます。したがって

require 'sqlite3'

例外が発生します:

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

自分の Gemfile に sqlite3 を追加せずにこれを修正する方法はありますか?

指摘しておきたいのですが、この問題は sqlite3 とは何の関係もないように思われますが、Bundler の動作に問題があるようです。sqlite3 が選ばれたのは、それがこの問題を発見するのに役立つ必要な宝石だったからです。

4

1 に答える 1

2

Bundler.setup を使用すると、ロード パスが明示的に変更されるため、Gemfile で指定された gem のみを使用できます。Gemfile で指定していないものを使用しないようにし、予期しない依存関係の競合を防ぐために、これは望ましい動作です。

gem を動的にロードする場合は、require false オプションを使用する必要があります。

gem "sqlite3", :require => false

これにより、バンドラーは sqlite3 をインストールしますが、必要な場合にのみ必要になります。

Bundler Gemfile のマニュアルを参照してください

于 2014-09-15T13:34:35.750 に答える