私はユーザー提供のルビコードを読み込むフレームワークを構築しています。これは基本的にプラグインの仕組みです。私は、ユーザがそれ自身の宝石を要求できるようにするためにルビコードを提供したい。私は、 "プラグイン"パッケージに宝石のベンダーディレクトリを含めるつもりです。ruby gemの競合するバージョンを管理する
プラグインが必要とする宝石をフレームワークの宝石と衝突させずにロードするにはどうしたらいいですか?たとえば、私のフレームワークがtreetopバージョン1.3.0を使用し、プラグインがtreetop 1.4.2を使用する場合、それぞれが指定されたバージョンで動作するようにします。
同様に、プラグインが互いに競合するのを防ぐ手段はありますか?
私はgem_plugin、_whyのサンドボックス、およびその他のツールを見てきました。しかし、私はこのケースを特別に扱うライブラリは見当たりません。
また、Bundlerの内部で宝石のバージョンを管理する方法を調べました。私は必要があればかなり複雑なものをやる準備ができています。しかし、私はそれについてどうやって行くのかまだ分かりません。
私はこれをどのように実装するかについて多くの自由を持っています。だから私が間違った木を鳴らしていると思ったら、そう言いなさい。
ありがとうございました。
SIDE注:これは、Javaサーブレットコンテナ内のClassloaderに似たものが必要だと書いている間に私に起こりました。 WARファイルにはjarファイルを含めることができ、Webアプリケーションのクラスローダーはグローバルクラスパス上のjarファイルよりも優先します。 Rubyに "classpath"(つまりload_path、requireなど)を分割する方法はありますか?
私の問題は、これと基本的に同じである可能性があります。 2つの異なる宝石の代わりに、私は同じ宝石の2つのバージョンを扱っています。 –
codefinger