web-dev-qa-db-ja.com

gemをインストールしましたが、「gemname」が機能しません。どうして?

私が本当に求めている質問は、なぜrequireがgemの名前をとらないのかということです。また、そうでない場合、秘密の呪文を見つける最も簡単な方法は何ですか?

例として、memcache-clientがインストールされている場合、それを使用して要求する必要があります

require 'rubygems'
require 'memcache'
61
mloughran

含める必要があるファイルの標準はありません。ただし、いくつかの一般的な慣習に従って、次のことを試すことができます。

  • 多くの場合、ファイルはgemと同じ名前で呼ばれます。そう require mygem 働くでしょう。
  • 多くの場合、このファイルはgemのlibサブディレクトリにある唯一の.rbファイルです。そのため、gemの名前を取得できる場合(おそらく、2.1以前のベンダー/ gemsで苦労していますRailsプロジェクト)、その後、#{gemname}/lib .rbファイルの場合、および1つしかない場合は、必要なものであるかなり良い賭け

これらすべてが機能する場合、できることはgemのディレクトリを確認することです(gem environment | grep INSTALLATION | awk '{print $4}'とlibディレクトリを見ると、おそらくファイルを読む必要があり、何をすべきかを説明するコメントがあることを期待するでしょう。

38
Laurie Young

私のシステムは、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'が必要」が機能しない場合、このアドバイスは限定的な助けになります:)

47
Atiaxi

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>
10
Kyle Burton

また、Railsの人々は、gemのインストール後にRailsサーバーを再起動するを忘れないでください

8
lee penkman

gemを使用してgemをインストールした場合にのみ、「rubygems」を含める必要があります。そうでなければ、秘密の呪文はirbを起動し、異なる組み合わせを試すことです。また、-IオプションをRubyインタープリターに渡すと、gemのインストールディレクトリをLOAD_PATHに含めることができます。$ LOAD_PATHは配列であり、スクリプト内からディレクトリを追加できることに注意してください。

3
Vhaerun

私が本当に求めている質問は、なぜrequireがgemの名前をとらないのかということです。

Gemをインストールすると、ファイルがシステムに取得されます。それらのファイルが何と呼ばれるかについては何も主張しません。
ローリーが指摘しているように 命名方法にはいくつかの規則がありますが、それを強制するものは何もありません。

また、そうでない場合、秘密の呪文を見つける最も簡単な方法は何ですか?

Gemのドキュメントを読んでください。
私はrdoc gemnameは通常 gemの公式rdocs を見つけます。これは通常、使用方法を示します。

MemcacheはおそらくRailsから使用することを前提としているため、最良の例ではなく、「require」はすでに行われていますが、私が見た他のほとんどには正しい「require」を示す例があります呪文

2
Orion Edwards

私がたまたま出会った問題は、実際に構築されたgemに必要なすべてのファイルが含まれていなかったことです。

filesの問題は、gemspecに構文ミスがあったが、ビルド中にエラーがスローされなかったことでした。

他の誰かが同じ問題に遭遇した場合に備えて、ここに追加してください。

1
Gerry

Rvmを使用していて、間違ったバージョンのRubyを使用しようとしたため、この問題が発生しました。問題のgemには1.9.2が必要で、デフォルトとして2.0.0を設定していました!ばかげたエラーかもしれませんが、他の誰かがこのページに到着した場合はおそらく間違いを犯しているでしょう。

0
Dreyfuzz

私もOS X Lionをインストールしてからこの問題があり、次のコードを実行しても警告メッセージが表示されることがわかりました。 require 'rubygems'require 'nokogiri'

こことWebに投稿された多くのソリューションを試しましたが、最終的には、ソリューションの回避策は http://martinisoftware.com/2009/07/31/nokogiri-on-leopardの指示に従うだけでした。 .html ソースからLibXMLとLibXSLTを再インストールしますが、インストールしたLibXMLのバージョンがNokogiriが期待するものと一致することを確認します。

それをやったら、警告は消えました。

0

Gemのソースを見て、libディレクトリを確認してください。 rbファイルがない場合は、サブディレクトリにあるgem main rbファイルをポイントする必要があります。

require 'dir/subdir/file'

ために /lib/dir/subdir/file.rb

0
hlcs