2012-09-08 6 views
6

私はgithubからリポジトリをクローンしました。私はコードを突っ込んでそれを混乱させたいので、Githubで実験したいと思います。私はこの宝石を読み込むべきtest.rbファイルを作成しましたが、ローカルでチェックアウトされたバージョンをロードしたいのですが、これを行う正しい方法は何ですか?ソースから宝石をどのようにロードするのですか?

今はちょうど"require_relative 'the_gem_name/lib/file'"の束を使用していますが、これは間違っています。コメント欄でapneadivingの提案に続き

+0

gemディレクトリに 'test.rb'を作成した場合は' require 'gemname''を使ってください。 –

+0

gemfileがありますか? – apneadiving

+0

可能であれば、gemディレクトリの外にtest.rbを作成したいと思います。そして、私はgemfileを持っていません。 – foobar

答えて

8

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

場合(おそらくそれは1.9+ルビーに含まれていることを与えられている)を使用してRubygemsのある、その後、代わりにすぐにLoadErrorインストールされているすべての宝石を1つのファイルfoo.rbが含まれているかどうかを確認するために検索される調達の。そのようなGemが見つかった場合は、それがロードパスに追加され、ファイルがロードされます。

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

ロードパスにディレクトリを追加する方法は2通りあります。

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

注普段宝石、ない宝石のトップレベルのディレクトリのlib DIRを(追加する:まず、$LOAD_PATH(または$:)グローバル変数を使用して、実際のコードでそれを行うことができます実際にはこれは実際のGemに依存して変わる可能性があり、複数のディレクトリを追加する必要がありますが、libが標準です)。

他の方法はruby実行可能ファイルに-Iコマンドラインスイッチを使用することです:

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

通常、あなたがからロードパスをいじりされないようにするため、この方法では、ビットクリーナーかもしれませんあなたのコードの中にはありますが、ライブラリをテストしているだけであれば多分問題はありません。

+0

gemspecを調べて、libが唯一指定されている[require path](http://guides.rubygems.org/specification-reference/#require_paths)であることを確認できます。これは、宝石がRubygemsにファイルが必要なときにどこを見ているかを伝える方法です。 –

+0

+1これは宝石を作り、それを他のプロジェクトと並行して消費するときの素晴らしい解決策です。 – ashes999

+0

'-I'が最高の部分でした。私は '' pry'で ' - gem'を使って変更を素早くテストしました! – Pysis

2

、私はGemfileを作成し、このライン

source "http://rubygems.org" 

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

その後bundle install、およびbundle exec ruby test.rbを追加し、それが働きました。

関連する問題