私が本当に求めている質問は、なぜrequireがgemの名前をとらないのかということです。また、そうでない場合、秘密の呪文を見つける最も簡単な方法は何ですか?
例として、memcache-client
がインストールされている場合、それを使用して要求する必要があります
require 'rubygems'
require 'memcache'
含める必要があるファイルの標準はありません。ただし、いくつかの一般的な慣習に従って、次のことを試すことができます。
require mygem
働くでしょう。#{gemname}/lib
.rbファイルの場合、および1つしかない場合は、必要なものであるかなり良い賭けこれらすべてが機能する場合、できることはgemのディレクトリを確認することです(gem environment | grep INSTALLATION | awk '{print $4}'
とlibディレクトリを見ると、おそらくファイルを読む必要があり、何をすべきかを説明するコメントがあることを期待するでしょう。
私のシステムは、RubyGemsの存在についても知らないようです-言わない限り。 「require」コマンドは、gemをロードできるようにRubyGemsによって上書きされますが、RubyGemsが既に必要でない限り、その方法はわかりません。したがって、独自に作成している場合は、次のことができます。
require 'rubygems'
require 'gem-name-here'
他の人のコードを実行している場合は、コマンドラインで次のように実行できます。
Ruby -r rubygems script.rb
また、環境変数Rubyは、起動時に何をロードするかを決定するために使用します。
export RUBYOPT=rubygems
( http://www.rubygems.org/read/chapter/ から。環境変数のことは Orion Edwards によって私に指摘された)
(ただし、「 'rubygems'が必要」が機能しない場合、このアドバイスは限定的な助けになります:)
RequireはRubyのパスにあるファイルにマップする必要があります。 「gem環境」を実行して、gemがインストールされている場所を見つけることができます(INSTALLATION DIRECTORYを探してください)。
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ファイルを探すことができます。さらに、$:の内容を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をインストールすると、ファイルがシステムに取得されます。それらのファイルが何と呼ばれるかについては何も主張しません。
ローリーが指摘しているように 命名方法にはいくつかの規則がありますが、それを強制するものは何もありません。
また、そうでない場合、秘密の呪文を見つける最も簡単な方法は何ですか?
Gemのドキュメントを読んでください。
私はrdoc gemname
は通常 gemの公式rdocs を見つけます。これは通常、使用方法を示します。
MemcacheはおそらくRailsから使用することを前提としているため、最良の例ではなく、「require」はすでに行われていますが、私が見た他のほとんどには正しい「require」を示す例があります呪文
私がたまたま出会った問題は、実際に構築されたgemに必要なすべてのファイルが含まれていなかったことです。
files
の問題は、gemspecに構文ミスがあったが、ビルド中にエラーがスローされなかったことでした。
他の誰かが同じ問題に遭遇した場合に備えて、ここに追加してください。
Rvmを使用していて、間違ったバージョンのRubyを使用しようとしたため、この問題が発生しました。問題のgemには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 main rb
ファイルをポイントする必要があります。
require 'dir/subdir/file'
ために /lib/dir/subdir/file.rb
。