1

Railsアプリケーション内からgemの現在の作業ディレクトリを取得する必要があります。

私は現在使用しています

`bundle show foo`.strip

これは私の環境ではうまく機能しますが、次のようになります。

  • シェルをロードする必要があるため、低速です
  • 誰かがWindowsまたはJRubyでアプリを実行しようとした場合、または$PATHがアプリの起動に使用されたものとは異なるルビーを指している場合はおそらく壊れます。

したがって、サブシェルを呼び出さずにこれを行う方法が必要です。

BundlerのRDOCは役に立ちませんでした。以前は、Rails 2のRails自体からこの種の情報を取得できましたが、Rails3ではBundlerに処理させるようです。

4

1 に答える 1

3

gemがGemfile/Gemfile.lockにある場合、そのパスは$LOAD_PATHグローバル変数に表示されます。この事実を利用することができます:

$:.grep(/activerecord/).first

$:と同じ$LOAD_PATHです。どちらでも使用できます。

別のアプローチ:

Bundler.load.specs.find{|s| s.name == 'activerecord' }.try(:full_gem_path)
于 2012-10-06T12:17:09.557 に答える