Cela dépend de la version de Ruby que vous utilisez.
Dans 1.8, cela devrait fonctionner comme vous le faites. Dans 1.9, vous devez utiliser require_relative
.
Vous ne devriez pas ajouter '.rb' à la fin, ce n'est pas recommandé.
Le danger avec un simple « besoin » avec un chemin relatif est si ce script lui-même est requis par un autre, le chemin sera par rapport au premier script appelé:
rootdir
- main.rb
- subdir1
- second.rb
- subdir11
- third.rb
Si main.rb est appelé, puis exiger second.rb (avec 'subdir1/second'
), puis vous souhaitez exiger third.rb avec 'subdir11/third.rb'
, cela ne fonctionnera pas.
Vous pourriez être relatif au premier script (subdir1/subdir11/third.rb
), mais ce n'est pas une bonne idée. Vous pouvez utiliser __FILE__
puis faire un chemin absolu:
exigent File.expand_path ('../ subdir11/third.rb', FICHIER)
(le premier .. est d'obtenir dans le répertoire qui contient le fichier) ou
exigent File.dirname (fICHIER) + '/subdir11/third.rb'
Mais la pratique la plus courante consiste à la référencer à partir du répertoire racine.
Dans une gemme, vous pouvez supposer que le rootdir sera dans le $LOAD_PATH
(ou vous pouvez l'ajouter vous-même).
Dans Rails, vous pouvez utiliser require "#{RAILS_ROOT}/path"
(rails2) ou
require Rails.root.join('path')
(rails3)
Pourquoi le '.rb' non recommandé? Si elle n'est pas spécifiée, la méthode require essayera de toute façon de trouver le fichier '.rb', ou un '.so' ou un '.dll'. – glmxndr
'recommandé' n'est probablement pas le bon mot, en effet. Mais c'est une pratique courante et je n'ai jamais vu de code l'utiliser, sauf quand il y a à la fois une bibliothèque partagée et un script ruby avec le même nom. En outre, il semble très laid;) – eregon