私は 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
そしてそれはうまくいきました。