3

Rubyスクリプトで使用しようとしてrakeいます...(Ruby 1.8.6、JRuby 1.6.5)

を使用してレーキをダウンロードしgem install --remote rake、インストール時に問題ないように見えます...

Fetching: rake-0.9.2.2.gem (100%)
Successfully installed rake-0.9.2.2
1 gem installed

問題なく動作する単純な ruby​​ スクリプトがありrakeますが、次requireの s のいずれかを使用してインポートすると、不平を言い始めます....

require 'rake'
LoadError: no such file to load -- rake
  or
require '/lib/rake'
LoadError: no such file to load -- lib/rake

いくつかの検索の後、問題を修正するrequire 'rubygems'直前に追加することがわかりました....rake

require 'rubygems'
require 'rake'

動いているのに、疑問が…。

  1. のgem仕様はasをrake示していますが、なぜ機能しないのですか? の意味を誤解していますか?require_pathlibrequire '/lib/rake'require_path

  2. require 'rubygems'なぜ前に置く必要があるのですかrequire 'rake'

4

2 に答える 2

6

はい、意味を誤解しています。仕様のは、その gem のインストール ディレクトリのサブディレクトリのrequire_paths配列であり、gemに属するファイルを検索する必要があります。

レーキが実際にどこにあるかを調べるには、これを試してください:

 $ gem which rake

とはまったく関係のない場所に実際にインストールされていることがわかります/lib。私のシステムでは、下にあり/var/lib/gemsます。一般に、Ruby gem は独自のディレクトリ構造に存在します。標準の Ruby インクルード パス ( $:) 内の唯一のファイルはrubygemsそれ自体でありrequire、実際の gem を表示するために明示的に指定する必要がありました。(Ruby 1.9 以降は必要ありません。)

Gem は、ロードするライブラリよりも複雑です。同じ gem の複数のバージョンをインストールして、一度に必要なバージョンを指定し、gem が標準の Ruby インクルード パスにダンプされただけでは機能しない他のことを行うことができます。

于 2012-05-02T16:23:13.740 に答える
1
  1. The require_path in the gemspec tells ruby where the files of this gem are located within the gem. It makes you able to type require 'rake', and ruby then knows it needs to look for /lib/rake within the gem installation folder.
  2. In Ruby 1.8, rubygems (the mechanism responsible for making gems available to your app) is not loaded by default, and the default ruby isn't aware of any gem on your system. You need to load rubygems before being able to require any other gem. This is not the case anymore with Ruby 1.9.
于 2012-05-02T16:29:02.033 に答える