55 votes

Comprendre les chemins de chargement de Ruby

Je ne comprends pas trop pourquoi mon projet ne peut pas charger les fichiers dont il a besoin. C'est une arborescence de projet très simple:

 processor/
  bin/
  lib/
    processor.rb
    processor/
      mapper.rb
      reducer.rb
 

et mon fichier processor.rb ressemble à

 require 'processor/mapper'
require 'processor/reducer'

class Processor

end
 

Et juste pour le tester, le mappeur de fichiers ressemble à:

 class Mapper
  def run
    puts "running map"
  end
end
 

Mais exécuter ruby lib/processor.rb donne les résultats suivants:

 <internal:lib/rubygems/custom_require>:29:in `require': no such file to load -- processor/mapper (LoadError)
    from <internal:lib/rubygems/custom_require>:29:in `require'
    from lib/processor.rb:3:in `<class:Processor>'
    from lib/processor.rb:2:in `<main>'    
 

74voto

Dylan Markow Points 65796

Ruby LOAD_PATH n'inclura pas votre répertoire lib par défaut (même si c'est là que se trouve le fichier que vous exécutez).

Vous pouvez indiquer à l'interprète ruby de l'inclure:

 ruby -Ilib lib/processor.rb
 

Ou vous pouvez ajouter le dossier lib au chemin de chargement:

 $LOAD_PATH.unshift(File.dirname(__FILE__))
require  'processor/mapper'
...
 

34voto

cam Points 8882

Ruby 1.9 n'inclut plus "." dans le chemin de chargement. Faites require "#{File.dirname(__FILE__)}/processor/mapper" ou utilisez require_relative .

Vous pouvez toujours déterminer le chemin de charge actuel en inspectant $LOAD_PATH (ou $: )

(édité: $ LOAD_PATH pas $: LOAD_PATH)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X