2010-10-28 10 views
11

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?

Odpowiedz

6

Czy jest to nazwa pliku CommandRunner, a nie CommandRunner.rb? Standardowa konwencja nazewnictwa dla plików ruby ​​polega na użyciu małych liter i podkreśleń, więc nawet jeśli nazwa klasy byłaby CommandRunner, plik byłby command_runner.rb, a następnie wymagał by "command_runner" działał.

+0

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

+3

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). –

+7

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ć. –

Powiązane problemy