Próbowałem dostać plik ruby, aby wymagać kolejnego pliku ruby i czuję, że zwariowałem. Moja konfiguracja wygląda następującoRuby wymaga błędu "brak takiego pliku do załadowania", ale wyraźnie w ścieżce
dwa pliki w '/ RAID1/ruby-code/odniesienia /'
CommandRunner Benchmarker
Benchmarker jest główny program w tym momencie i chce wymagać CommandRunner, próbowałem kilka różnych rzeczy i żaden z nich nie działa. Poniżej znajduje się lista wszystkich rzeczy, jakie umieszczone na początku Benchmarker
require 'CommandRunner'
require './CommandRunner'
$LOAD_PATH.unshift File.expand_path(File.dirname($PROGRAM_NAME)) require 'CommandRunner'
$LOAD_PATH.unshift File.expand_path(File.dirname($PROGRAM_NAME)) require './CommandRunner'
Ja również próbował wszystkich powyższych permutacji korzystających require_relative. Próbowałem go załadować plik do irb wewnątrz emacs i próbowałem go w wierszu poleceń. W pewnym momencie będzie ładował się raz z
require 'CommandRunner', a następnie będzie ładowany, dopóki nie przełączyłem go z powrotem na "./CommandRunner", a następnie załaduje się ponownie.
ja rzeczywiście miał błąd powiedzieć
`require_relative': no such file to load -- /raid1/ruby-code/benchmark/CommandRunner (LoadError)
co jest poprawną ścieżkę do pliku!
Mam ponieważ włączony do ładowania i że wydaje pracować, widzę dziwne zachowanie, ale to właśnie może być ja. Czy ktoś ma pojęcie, co się tutaj dzieje?
Nazwą pliku jest CommandRunner, mogę go zmienić, ponieważ nie jestem pewien, jaka jest standardowa praktyka, ale właśnie teraz jest to nazwa pliku. – asm
Nie mogę znaleźć w dokumentacji, że to nie jest obsługiwane. Jeśli zmienisz CommandRunnera na CommandRunner.rb, będzie działało, ale myślę, że może to być błąd w eval.c, że nie znajduje pliku CommandRunner (a co gorsza, mówi, że plik nie istnieje). –
Ah, myślę, że znalazłem to. Z http://ruby-doc.org/core/classes/Kernel.html#M005941 "... W przeciwnym razie, Ruby próbuje dodać do nazwy" .rb "," .so "i tak dalej. " Oznacza to, że jeśli nie zostanie podane żadne rozszerzenie, ruby spróbuje dodać prawidłowe rozszerzenia, więc brak rozszerzenia nie jest określony. Innymi słowy, żadne rozszerzenie nie jest uważane za poprawne, jeśli chcesz tego wymagać. –