2012-01-16 10 views
35

en INICIO/path_test/tengo:archivo de configuración de carga Rubí (yaml) en el mismo directorio como fuente de

load_test.rb:

require 'yaml' 
cnf = YAML::load(File.open('config.yml')) 
puts cnf['Hello'] 

config.yml:

Hello: world!!! 

cuando en HOME/path_test/obtengo lo que esperaba:

-bash-3.2$ ruby load_test.rb 
world!!! 

cuando en INICIO/(cd ..) consigo

-bash-3.2$ ruby path_test/load_test.rb 
path_test/load_test.rb:3:in `initialize': No such file or directory - config.yml  (Errno::ENOENT) 
    from path_test/load_test.rb:3:in `open' 
    from path_test/load_test.rb:3:in `<main>' 

¿Cuál es el comportamiento correcto, pero no lo que yo hubiera deseado :)

¿Hay una manera de cargar el archivo .yml en relación con el archivo de origen, y no relativo al actual DIR de trabajo?

Solución (load_Test.rb):

require 'yaml' 
fn = File.dirname(File.expand_path(__FILE__)) + '/config.yml' 
cnf = YAML::load(File.open(fn)) 
puts cnf['Hello'] 

Respuesta

74

Usted debe obtener la ruta del archivo actual por:

cnf = YAML::load_file(File.join(File.dirname(File.expand_path(__FILE__)), 'config.yml')) 

EDIT:

Desde Rubí 2.0 se puede simplificar este y uso:

cnf = YAML::load_file(File.join(__dir__, 'config.yml')) 
+0

Gracias (un ')' demasiado al final:]) justo lo que necesitaba – FelixHJ

+3

Esta es la solución completa (dividida en 2 líneas para mayor claridad): 'require 'yaml' fn = File.dirname (Archivo .expand_path (__ FILE__)) + '/config.yml' cnf = YAML :: load (File.open (fn)) puts cnf ['Hello'] ' – FelixHJ

+0

Hmm no puedo obtener el formateo para trabajar .... – FelixHJ

Cuestiones relacionadas