Imaginez que vous avez un foo.rb exécutable, avec les bibliothèques bar.rb dans la pondus manière suivante:Recherche de bibliothèques relatives lors de l'utilisation des liens symboliques à ruby executables
<root>/bin/foo.rb
<root>/lib/bar.rb
Dans l'en-tête de foo.rb vous placez le suivant besoin d'apporter des fonctionnalités dans bar.rb:
require File.dirname(__FILE__)+"../lib/bar.rb"
Cela fonctionne très bien tant que tous les appels à foo.rb sont directs. Si vous mettez par exemple $ HOME/project et symlink foo.rb dans $HOME/usr/bin
, alors
résout en __FILE__
$HOME/usr/bin/foo.rb
, et est donc incapable de localiser bar.rb
par rapport au nom de répertoire pour foo.rb
.
Je me rends compte que les systèmes d'emballage tels que rubygems résoudre ce problème en créant un espace de noms pour rechercher la bibliothèque, et qu'il est également possible de régler le load_path en utilisant $:
pour inclure $HOME/project/lib
, mais il semble que si une solution plus simple devrait exister. Est-ce que quelqu'un a eu de l'expérience avec ce problème et a trouvé une solution ou une recette utile?
C'est certainement mieux, au moins c'est juste deux lignes. Toujours malheureux qu'il n'y ait pas une seule solution de ligne. – dgtized