La compréhension de Ruby chemins de chargement
Je suis un peu confus au sujet de pourquoi mon projet ne peut pas charger les fichiers dont il a besoin, c'est vraiment un projet simple:
processor/
bin/
lib/
processor.rb
processor/
mapper.rb
reducer.rb
et mon processor.rb
fichier ressemble à
require 'processor/mapper'
require 'processor/reducer'
class Processor
end
Et juste pour tester ce fichier mappeur ressemble:
class Mapper
def run
puts "running map"
end
end
Mais l'exécution ruby lib/processor.rb
résultats dans:
<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>'
- "Ruby" a une apostrophe parce que vous êtes en indiquant les chemins de chargement appartenir à celle-ci, plutôt que qu'il y a de multiples rubis.
Vous devez vous connecter pour publier un commentaire.
Ruby
$LOAD_PATH
pas votrelib
répertoire par défaut (même si c'est là le fichier que vous êtes en cours d'exécution est situé).Vous pouvez soit dire la
ruby
interprète de l'inclure:Ou vous pouvez ajouter la
lib
dossier du chemin de chargement:Ruby 1.9 ne comprend plus "." dans le chemin de chargement. Ne
require "#{File.dirname(__FILE__)}/processor/mapper"
ou de l'utilisationrequire_relative
.Vous pouvez toujours déterminer la charge actuelle de chemin d'accès par l'inspection
$LOAD_PATH
(ou$:
)(édité: $LOAD_PATH pas $:LOAD_PATH)
ruby lib/processor.rb
à partir de la racineprocessor
dossier). Toutefois, l'exécution deruby processor.rb
tandis que dans lelib
dossier de travail sur la 1.8, mais pas sur 1.9.Utilisation de Ruby
require_relative
dans ce cas: