9

私は Github からレポを git clone しました。コードをいじり回したいのと同じように、それを試してみたいと思います。この gem をロードするファイル test.rb を作成しましたが、ローカルでチェックアウトしたバージョンをロードしたいのですが、これを行う正しい方法は何ですか?

現在、私はたくさんの を使用していますが"require_relative 'the_gem_name/lib/file'"、これは間違っていると感じています。

4

2 に答える 2

10

require 'foo'Ruby はファイルのロード パス内のすべてのディレクトリをチェックし、foo.rb最初に見つかったディレクトリをロードします。指定されたファイルfoo.rbが見つからず、Rubygems を使用していないLoadError場合は、aが発生します。

Rubygems を使用している場合 (Ruby 1.9 以降に含まれている可能性が高い)、インストールされているすべての Gem をすぐに呼び出すのではなく fileLoadErrorが含まれているかどうかを確認しますfoo.rb。そのような Gem が見つかった場合、それがロード パスに追加され、ファイルがロードされます。

特定のバージョンのライブラリが使用されるようにする場合は、ロード パスを自分で操作できます。通常、これは推奨されるものではありませんが、これは実行したい状況です。

ロード パスにディレクトリを追加するには、2 つの方法があります。$LOAD_PATHまず、 (または$:) グローバル変数を使用して、実際のコードで実行できます。

$LOAD_PATH.unshift '/path/to/the/gems/lib/'
require 'the_gem'

lib通常、gem の最上位のディレクトリではなく、gemのディレクトリを追加することに注意してください(実際には、これは実際の G​​em によって異なります。複数のディレクトリを追加する必要がある場合もありますが、これlibが標準です)。

もう 1 つの方法は、実行可能ファイル-Iへのコマンド ライン スイッチを使用することです。ruby

$ ruby -I/path/to/the/gems/lib/ test.rb

通常はコード内からロード パスをいじりたくないので、この方法は少しすっきりするかもしれませんが、ライブラリをテストするだけであれば、おそらくそれほど問題にはなりません。

于 2012-09-08T21:37:57.110 に答える
5

コメントでのapneadivingの提案に従って、Gemfileを作成し、この行を追加しました

source "http://rubygems.org"

gem 'gem_name', path: '~/path/to/gem/source/folder'

それbundle installから、bundle exec ruby test.rbそしてそれはうまくいきました。

于 2012-09-08T21:13:16.160 に答える