2011-07-19 5 views
5

Tenga en cuenta que no estoy usando Rails. Tengo una estructura de directorios como:¿Por qué no puedo solicitar un archivo en el directorio padre en ruby?

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} 

cuando estoy en este directorio raíz

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

Pero cuando estoy en foo/y realice una de el siguiente:

>> 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 

Respuesta

5

require se basa en el archivo que se llama, lo que generalmente significa config.ru. Necesita require_relative (que se basa en el archivo actual), o una ruta absoluta.

+0

En caso de no incluir el trabajo con expand_path entonces? Eso crea un camino absoluto. –

+0

Debería, pero ... ¿Qué requiere rendimiento relativo? –

4

Esto puede estar jugando un papel, dependiendo de la versión de ruby ​​que estés utilizando.
Current directory removed from load path for ruby 1.9.2

Sospecho que su problema es esta línea: require '../base_classes' cuando en foo/.
Pruebe require_relative '../base_classes' en su lugar y vea qué sucede.

Supongamos que es usando ruby ​​1.9.2. Si no, puede necesitar cavar más profundo. Debe etiquetar la pregunta o mencionar en ella (o ambas cosas, preferiblemente) qué versión de ruby ​​está ejecutando.

0

La cuestión era en realidad dentro de base_classes.rb, que tenía que requieren los tipos de archivos:

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} 
1

único que se necesitaba era utilizar un solo punto en lugar de dos puntos.

Basado en el código de ejemplo dado:

require File.expand_path("./base_classes.rb") 
Cuestiones relacionadas