Quelle est la meilleure pratique si je veux require
un fichier relatif en Ruby y Je veux qu'il fonctionne à la fois dans 1.8.x et >=1.9.2 ?
Je vois quelques options :
-
juste faire
$LOAD_PATH << '.'
et oublier tout -
faire
$LOAD_PATH << File.dirname(__FILE__)
-
require './path/to/file'
-
vérifier si
RUBY_VERSION
< 1.9.2, alors définirrequire_relative
commerequire
, utiliserrequire_relative
partout où cela est nécessaire par la suite -
vérifier si
require_relative
existe déjà, si c'est le cas, essayer de procéder comme dans le cas précédent -
utiliser des constructions bizarres telles que`
require File.join(File.dirname(__FILE__), 'path/to/file')
`- Hélas, elles ne semblent pas fonctionner complètement en Ruby 1.9, parce que, par exemple :
$ cat caller.rb require File.join(File.dirname(__FILE__), 'path/to/file') $ cat path/to/file.rb puts 'Some testing' $ ruby caller Some testing $ pwd /tmp $ ruby /tmp/caller Some testing $ ruby tmp/caller tmp/caller.rb:1:in 'require': no such file to load -- tmp/path/to/file (LoadError) from tmp/caller.rb:1:in '<main>'
-
Une construction encore plus bizarre :`
require File.join(File.expand_path(File.dirname(__FILE__)), 'path/to/file')
`semble fonctionner, mais c'est bizarre et pas très joli.
-
Utilisation backports gem - il est un peu lourd, il nécessite une infrastructure rubygems et inclut des tonnes d'autres solutions de contournement, alors que je veux juste
require
pour travailler avec des fichiers relatifs.
Il y a un question étroitement liée à StackOverflow qui donne d'autres exemples, mais ne donne pas de réponse claire - ce qui est une bonne pratique.
Existe-t-il une solution universelle, acceptée par tous, pour faire fonctionner mon application à la fois sur Ruby <1.9.2 et >=1.9.2 ?
MISE À JOUR
Clarification : Je ne veux pas seulement des réponses du type "vous pouvez faire X" - en fait, j'ai déjà mentionné la plupart des choix de la question. Je veux raison d'être , c'est-à-dire pourquoi il s'agit d'une meilleure pratique, quels sont ses avantages et ses inconvénients et pourquoi elle devrait être choisie parmi les autres.