私は Github からレポを git clone しました。コードをいじり回したいのと同じように、それを試してみたいと思います。この gem をロードするファイル test.rb を作成しましたが、ローカルでチェックアウトしたバージョンをロードしたいのですが、これを行う正しい方法は何ですか?
現在、私はたくさんの を使用していますが"require_relative 'the_gem_name/lib/file'"、これは間違っていると感じています。
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のディレクトリを追加することに注意してください(実際には、これは実際の Gem によって異なります。複数のディレクトリを追加する必要がある場合もありますが、これlibが標準です)。
もう 1 つの方法は、実行可能ファイル-Iへのコマンド ライン スイッチを使用することです。ruby
$ ruby -I/path/to/the/gems/lib/ test.rb
通常はコード内からロード パスをいじりたくないので、この方法は少しすっきりするかもしれませんが、ライブラリをテストするだけであれば、おそらくそれほど問題にはなりません。
コメントでのapneadivingの提案に従って、Gemfileを作成し、この行を追加しました
source "http://rubygems.org"
gem 'gem_name', path: '~/path/to/gem/source/folder'
それbundle installから、bundle exec ruby test.rbそしてそれはうまくいきました。