2011-12-14 13 views
15

Jak mogę zażądać pliku z bieżącego folderu?Ruby: jak "wymagać" pliku z bieżącego katalogu roboczego?

Mam plik o nazwie sql_parser.rb, który zawiera klasę. Chcę uwzględnienie tego w innym pliku również w tym samym folderze, więc użyłem:

require 'sql_parser' 

to zawiedzie, kiedy biegnę z tego folderu:

LoadError: no such file to load -- sql_parser 

Próbowałem przy użyciu IRB w folderze, w którym to plik istnieje i wymaga go stamtąd, ale miał ten sam problem.

+1

Zobacz również http://stackoverflow.com/questions/2900370/why-does-ruby -1-9-2-usuń-od-load-path-and-whats-the-alternative – knut

Odpowiedz

2
$LOAD_PATH << Dir.pwd 
require 'sql_parser' 

Jak zauważył @AndrewGrimm, ze względów bezpieczeństwa, należy użyć zamiast tego:

Twój katalog musi być w bieżącej ścieżce obciążenia. Ścieżka obciążenia jest przechowywana w globalnej tablicy o nazwie $LOAD_PATH. Jeśli dołączysz do niego swój bieżący katalog, możesz użyć polecenia require, aby wczytać dowolne pliki w katalogu.

Korzystanie Dir.pwd zamiast pwd .chomp jako sugerowane przez Tin Man

Również wolę to ponad require_relative chyba że masz naprawdę mały projekt inaczej rzeczy można dostać brzydkie.

+0

Pozdrawiam. To działa, ale myślałem, że ruby ​​zawsze będzie wyglądać w pwd, czy jestem w błędzie? –

+0

@Matt Roberts niestety nie, ale jeśli pracujesz w aplikacji rails, wszystko to jest dla ciebie obsługiwane. – bkempner

+0

@MattRoberts: To zależy od wersji ruby. – knut

3

W wersji 1.9 zmieniono składnię na require_relative, jak podały inne odpowiedzi na to pytanie.

Jeśli piszesz w Rubim 1.8, sugeruję napisanie kodu w sposób wybiegający w przyszłość i użycie require_relative gem, abyś mógł użyć tego słowa kluczowego w Ruby 1.8 i poradzić sobie z jednym, mniej przejawianym, kiedy przejdziesz do 1.9

+0

Ta odpowiedź powinna być komentarzem do rozwiązania, a nie odpowiedzią. –

7

Zastosowanie

$:.unshift File.join(File.dirname(__FILE__)) 

aby upewnić się, że jesteś coraz ścieżkę oparty na którym znajduje się skrypt, zamiast w którym program jest wykonywany od. W przeciwnym razie usuniesz korzyści bezpieczeństwa uzyskane po usunięciu "." ze ścieżki ładowania.

(Tak, tytuł pytania mówi o wymaganiu pliku w katalogu, z którego uruchamiany jest skrypt, ale treść pytania wspomina, że ​​wymagany plik znajduje się w tym samym folderze co skrypt)

+0

Dlaczego używasz "." Mniej bezpieczne? Dlaczego zamiast tego zamiast Dir.pwd? (jest bardziej zwięzły i osiąga to samo, co nie?) – bkempner

+0

@bkempner: Czy przeczytałeś pytanie związane z komentarzem w tym pytaniu? –

+0

ah, zrobiłem to teraz, dzięki. – bkempner

3

również ...

wymagać "./myRubyFile" # zawiadomienie możemy wykluczyć .rb z myRubyFile.rb

Powiązane problemy