2011-01-08 10 views
54

Piszę skrypt Ruby do użytku w środowisku Rails, ale wybrałem, aby uruchomić go z irb, ponieważ ponowne ładowanie konsoli Rails może być uciążliwe. Teraz czas oczekiwania jest znacznie krótszy od irb, ale martwi mnie to, że muszę ponownie uruchomić irb i wymagać skryptu za każdym razem, gdy wprowadzam zmianę. Czy istnieje prostszy sposób ponownego załadowania skryptu z irb?Jak mogę ponownie załadować skrypt w IRB?

Znalazłem metodę w this thread, ale najwyraźniej dotyczy to tylko plików gem. Moi wymagają oświadczenie wygląda to

require "#{File.expand_path(__FILE__)}/../lib/query" 

EDIT: Próbowałem load zamiast require, ja wciąż nie może zmusić go do pracy. Nie mogę przestać na tych błędach.

ruby-1.9.2-p0 > load "#{File.expand_path(__FILE__)}/../lib/query.rb" 
LoadError: no such file to load -- /Users/newuser/Dropbox/Sites/rails/hacknyc/(irb)/../lib/query.rb 

Odpowiedz

84

W irb, File.expand_path(__FILE__)} po prostu wróci "#{path you ran irb from}/(irb)". Który tworzy ścieżkę, która w rzeczywistości nie istnieje. Na szczęście wszystkie ścieżki plików są zależne od miejsca, w którym i tak uruchomiono irb. Oznacza to, wszystko czego potrzebujesz to:

load "lib/query.rb" 

Jeśli chcesz użyć __FILE__ w rzeczywistej pliku, to w porządku, ale nie spodziewaj się, że produkują poprawną ścieżkę w IRB. Ponieważ irb w ogóle nie ma "pliku", więc nie może w ogóle zwrócić poprawnej ścieżki.

Również, __FILE__ będzie działał poprawnie, jeśli zostanie użyty w pliku załadowanym do urządzenia przez obciążenie lub wymaganie. Bo to jest po co to jest.

34

Zamiast require, spróbuj load. Pierwszy ładuje plik źródłowy tylko raz, a drugi ładuje go za każdym razem, gdy go wywołujesz.

+1

Próbowałem obciążenia, ale nadal narzeka, że ​​nie może znaleźć pliku, a ja umieściłem rozszerzenie rb na końcu linii. – picardo

+0

Dla porównania, zobacz "Ruby Wymagaj VS Load VS Uwzględnij rozszerzenie VS" - http://ionrails.com/2009/09/19/ruby_require-vs-load-vs-include-vs-extend/ – Purplejacket

1

Myślę, że load jest tym, czego szukasz.

+1

Próbowałem ' load' ale nadal narzeka, że ​​nie może znaleźć pliku, a ja umieściłem rozszerzenie rb na końcu linii. – picardo

+1

Spróbuj umieścić rozszerzenie pliku – hyeomans

3

zgodnie z this link musisz załadować swój plik i nie zapomnij o przedłużeniu.

Oto bardziej wyrafinowana wersja, której można użyć pod adresem this link number 2, która również może być pomocna.

Być może warto wypróbować, dlaczego konsola szynowa nie działa.

+0

Konsola Rails jest po prostu zbyt wolna, aby załadować. Próbowałem 'load', ale nadal narzeka, że ​​nie może znaleźć pliku, a ja umieściłem rozszerzenie rb na końcu linii. – picardo

+0

, jeśli ten plik znajduje się w katalogu lib, jest załadowany i możesz/powinien móc z niego korzystać, chyba że generuje błędy przy uruchamianiu. Aby użyć go w innym pliku, wystarczy dodać 'require NameOfModuleOrClass' (to jest w tym pliku zapytania) do jednego z plików w twojej aplikacji rails. – pjammer

Powiązane problemy