Wyobraź masz wykonywalnego foo.rb, z bibliotekami bar.rb layed się w następujący sposób:Znalezienie biblioteki względne przy użyciu dowiązania do ruby wykonywalne
<root>/bin/foo.rb
<root>/lib/bar.rb
W nagłówku foo.rb umieścić poniżej wymagane do wprowadzenia funkcji w pliku bar.rb:
require File.dirname(__FILE__)+"../lib/bar.rb"
Działa to dobrze, o ile wszystkie wywołania foo.rb są bezpośrednie. Jeśli wstawisz jako przykład $ HOME/project i dowiązanie symboliczne foo.rb do $HOME/usr/bin
, wówczas
rozwiąże się na __FILE__
$HOME/usr/bin/foo.rb
, a zatem nie będzie w stanie zlokalizować bar.rb
w odniesieniu do dirname dla foo.rb
.
Zdaję sobie sprawę, że systemy opakowaniowe takie jak RubyGems rozwiązać ten problem poprzez stworzenie przestrzeni nazw, aby szukać w bibliotece, i że jest to również możliwe, aby dostosować load_path użyciu $:
zawierać $HOME/project/lib
, ale wydaje się, że bardziej proste rozwiązanie powinno istnieć. Czy ktoś miał doświadczenie z tym problemem i znalazł przydatne rozwiązanie lub przepis?
To zdecydowanie lepiej, przynajmniej to tylko dwie linie. Nadal niefortunne, że nie ma jednego rozwiązania liniowego. – dgtized