2012-06-15 12 views
5

W environment.rb, mamOdśwież szyn inicjalizatory

config.autoload_paths += %W(#{config.root}/lib 

Więc kiedy zmodyfikować klasę pod lib, mój kod jest przeładowana.

, gdy próbowałem dodać config/inicjatorów do autoload, zauważyłem jednak mój kod nie zostanie zaktualizowany.

Jeśli Piszę rozszerzenie dla klasy String, muszę ponownie uruchomić szyn za każdym razem modyfikować swój kod.

Proszę doradzić?

Odpowiedz

5

inicjalizatory są ładowane tylko podczas uruchamiania szyny (i nigdy reloaded). Podczas majsterkowania w config/initializers będziesz za każdym razem ponownie uruchamiać tory.

Oczywiście można się upewnić, że kod jest zdefiniowany w /lib, dzięki czemu można się upewnić, że działa, korzystając z zestawu testowego.

E.g. w lib/speaker.rb napisać

module Speaker 
    def speak 
    puts "Ahum, listen: #{self.to_s}" 
    end 
end 

iw swoim inicjatora można wtedy zrobić coś

class String 
    include Speaker 
end 

Choć będzie to tylko nadal ładowane podczas uruchamiania szyny, można rozwijać i łatwiej przetestować moduł.

Mam nadzieję, że to pomoże.

+1

Dziękuję bardzo! – Abdo

3

inicjalizator pliki są ładowane tylko raz, gdy serwer jest uruchamiany szyny. Zrestartuj serwer po zmianie wartości początkowych. Aby uzyskać więcej informacji, patrz tory initialization guides.

Auto przeładowywania 'lib' w sprawie zmian

auto można przeładować pliki lib. Śledź łącze Autoload and Reload lib directory on change

W Konfigurowanie aplikacji Railsowych: config.reload_classes_only_on_change włącza lub wyłącza ponowne ładowanie klas tylko po zmianie śledzonych plików. Domyślnie śledzi wszystko na ścieżkach autoload i jest ustawione na true. Jeśli config.cache_classes ma wartość true, ta opcja jest ignorowana.

+0

To było moje pytanie; Nie chciałem restartować serwera. Potrzebowałem lepszego sposobu na debugowanie mojego kodu. – Abdo

+0

(Widziałem tylko -1; nie było mnie =)) – Abdo

+0

paukul dzięki za edycji –