8

私はRailsを使用していないことに注意してください。次のようなディレクトリ構造があります。

foo/
bar/
base_classes/
base_classes.rb

base_classes.rb:

 Dir.glob(File.expand_path(File.join("base_classes/config/constants", "*.rb"))) { |file| require file}
 Dir.glob(File.expand_path(File.join("base_classes", "*.rb"))) { |file| require file}

このルートディレクトリにいるとき

>> require 'base_classes' #=> true
>> Card.load!
[stuff happens]

しかし、私が foo/ にいて、次のいずれかを行うとき:

>> require '../base_classes' #=> true
>> require File.expand_path("../base_classes.rb") #=> true
>> require File.expand_path("../base_classes") #=> true
>> Card.load!
>> NameError: uninitialized constant Card
4

4 に答える 4

6

require呼び出されるファイルに基づいています。これは通常、を意味しconfig.ruます。require_relative(現在のファイルに基づく)、または絶対パスが必要です。

于 2011-07-19T20:12:08.033 に答える
4

使用しているルビーのバージョンによっては、これが役割を果たしている可能性があります。
ruby1.9.2のロードパスから現在のディレクトリが削除されました

私はあなたの問題がこの行にあると思います:にいるrequire '../base_classes'ときfoo/。代わりに
試して、何が起こるかを確認してください。require_relative '../base_classes'

これは、ruby1.9.2を使用していることを前提としています。そうでない場合は、さらに深く掘り下げる必要があるかもしれません。質問にタグを付けるか、質問に(または両方、できれば両方)、実行しているルビーのバージョンを記載する必要があります。

于 2011-07-19T20:36:58.367 に答える
1

必要なのは、2 つのドットの代わりに 1 つのドットを使用することだけでした。

与えられたコード例に基づいて:

require File.expand_path("./base_classes.rb")
于 2011-09-19T12:40:45.060 に答える
0

問題は実際には base_classes.rb 内にあり、次のようなファイルを要求する必要がありました。

Dir.glob(File.join(File.dirname(__FILE__), 'base_classes/config/constants', "*.rb")) { |file| require file}
Dir.glob(File.join(File.dirname(__FILE__), 'base_classes', "*.rb")){ |file| require file}
于 2011-07-19T20:57:43.947 に答える