私が本当に尋ねている質問は、requireが宝石の名前をとらない理由です。また、そうでない場合、くそったれを要求する秘密のインカンテーションを見つける最も簡単な方法は何ですか!?
例として、私がmemcache-client
インストールした場合、私はそれを使用してそれを要求する必要があります
require 'rubygems'
require 'memcache'
また、私のシステムは RubyGems の存在を認識していないようです (私が指示しない限り)。「require」コマンドは RubyGems によって上書きされるため、gem をロードできますが、RubyGems が既に必要な場合を除き、それを行う方法がわかりません。したがって、自分で書いている場合は、次のことができます。
require 'rubygems'
require 'gem-name-here'
他の誰かのコードを実行している場合は、コマンド ラインで次のように実行できます。
ruby -r rubygems script.rb
また、Ruby が起動時に何をロードするかを決定するために使用する環境変数もあります。
export RUBYOPT=rubygems
( http://www.rubygems.org/read/chapter/3より。環境変数の件はOrion Edwardsさんから指摘されました)
(ただし、require 'rubygems' がうまくいかない場合、このアドバイスはあまり役に立ちません :)
含める必要のあるファイルの基準はありません。ただし、一般的に従う規則がいくつかあり、それらを試して利用することができます。
require mygem
動作します。#{gemname}/lib
。 rbファイル、および1つしかない場合は、必要なものであるかなり良い賭けですそれがすべてうまくいったら、あなたができることはgemのディレクトリを調べることだけです(gem environment | grep INSTALLATION | awk '{print $4}'
libディレクトリを実行して調べることで見つけることができます。おそらくファイルを読む必要があり、何をすべきかを説明するコメントがあることを願っています
requireは、rubyのパスにあるファイルにマップする必要があります。「gemenvironment」を実行すると、gemがインストールされている場所を確認できます(インストールディレクトリを探してください)。
kburton@hypothesisf:~$ gem environment
RubyGems Environment:
- RUBYGEMS VERSION: 1.2.0
- RUBY VERSION: 1.8.7 (2008-08-08 patchlevel 71) [i686-linux]
- INSTALLATION DIRECTORY: /usr/local/ruby/lib/ruby/gems/1.8
- RUBY EXECUTABLE: /usr/local/ruby/bin/ruby
- EXECUTABLE DIRECTORY: /usr/local/ruby/bin
- RUBYGEMS PLATFORMS:
- ruby
- x86-linux
- GEM PATHS:
- /usr/local/ruby/lib/ruby/gems/1.8
- GEM CONFIGURATION:
- :update_sources => true
- :verbose => true
- :benchmark => false
- :backtrace => false
- :bulk_threshold => 1000
- REMOTE SOURCES:
- http://gems.rubyforge.org/
kburton@editconf:~$
次に、必要な特定の.rbファイルを探すことができます。さらに、$:from irbの内容を印刷して、rubyがモジュールを検索するパスのリストを確認できます。
kburton@hypothesis:~$ irb
irb(main):001:0> $:
=> ["/usr/local/ruby/lib/ruby/site_ruby/1.8", "/usr/local/ruby/lib/ruby/site_ruby/1.8/i686-linux", "/usr/local/ruby/lib/ruby/site_ruby", "/usr/local/ruby/lib/ruby/vendor_ruby/1.8", "/usr/local/ruby/lib/ruby/vendor_ruby/1.8/i686-linux", "/usr/local/ruby/lib/ruby/vendor_ruby", "/usr/local/ruby/lib/ruby/1.8", "/usr/local/ruby/lib/ruby/1.8/i686-linux", "."]
irb(main):002:0>
また、Railsユーザーは、gem をインストールした後、Rails サーバーを再起動することを忘れないでください。
gemを使用してgemをインストールした場合にのみ、「rubygems」を含める必要があります。それ以外の場合、秘密のインカンテーションはirbを起動し、さまざまな組み合わせを試すことです。また、-Iオプションをrubyインタープリターに渡して、gemのインストールディレクトリをLOAD_PATHに含めることもできます。$ LOAD_PATHは配列であることに注意してください。これは、スクリプト内からディレクトリを追加できることを意味します。
私が本当に求めている質問は、require が gem の名前をとらない理由です。
gem をインストールすると、ファイルがシステムに取り込まれます。これらのファイルが何と呼ばれるかについては何も主張しません。
laurie が指摘しているように、名前の付け方にはいくつかの規則がありますが、それを強制するものは何もなく、残念ながら多くの gem 作成者はそれらに固執していません。
また、そうでない場合、いまいましいことを要求するための秘密の呪文を見つける最も簡単な方法は何ですか!?
gem のドキュメントを読みますか?
をグーグルで検索すると、通常はgem の公式の rdoc がrdoc gemname
見つかり、通常は使用方法が示されます。
Memcache はおそらく最良の例ではありません。レールから使用することを想定しており、「require」はすでに行われているためですが、私が見た他のほとんどのものには、正しい「require」を示す例があります。呪文
rvm を使用していて、間違ったバージョンの Ruby を使用しようとしていたため、この問題が発生しました。問題の宝石には 1.9.2 が必要で、デフォルトとして 2.0.0 を設定していました! ばかげたエラーかもしれませんが、このページに到達した他の誰かがおそらく犯したエラーです。
OS X Lionをインストールしてから私もこの問題を抱えていました。次のコードを実行しても、警告メッセージが表示されることがわかりました。
require 'rubygems'
require 'nokogiri'
こことWebに投稿されたソリューションをたくさん試しましたが、最終的に解決策を回避するには、http://martinisoftware.com/2009/07/31/nokogiri-on-leopard.htmlの指示に従って再インストールします。ソースからのLibXMLとLibXSLTですが、インストールしたLibXMLのバージョンが、Nokogiriで期待されていたものと一致していることを確認してください。
それをしたら、警告は消えました。
gem のソースを見て、lib
ディレクトリを確認します。ファイルがない場合は、サブディレクトリ内のrb
gem メイン ファイルを指定する必要があります。rb
require 'dir/subdir/file'
のために/lib/dir/subdir/file.rb
。