Tworzę sobie od jakiegoś tygodnia projekt w Railsach pod Windowsem. Idzie ciężko, ale do przodu. Nagle sobie myślę, że muszę przetestować czy ta aplikacja dobrze się wdroży na wynajętym hostingu. Instaluję sobie pod linuxem ruby, railsy i serwer mongrel (taki jaki mają na hostingu). No i włączam tą aplikację poleceniem “mongrel_rails start”. Jakże by inaczej? Nie działa. Jak mówi odwieczne prawo Ziemi i Nieba, jeśli coś może tak nie pójść to tak pójdzie. Mówiąc jaśniej, co się chwieje to upadnie. Zdenerwowany włączam “ruby script/console” i sobie wpisuje “User.find :all”. Pod Windowem pod Webbrickem to ładnie działało wypisywało wszystkich użytkowników. A tu wyświetla zbereźny błąd:
LoadError: Expected {tu moja sciezka}/app/models/user.rb to define User
Wpisanie tego polecenia w konsoli nic nie daje, ale zapomniałem że dokładniej ten błąd tak wygląda:
LoadError: Expected {tu moja sciezka}/app/models/user.rb to define User
from /home/michal/.gem/ruby/1.8/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:426:in load_missing_constant' from /home/michal/.gem/ruby/1.8/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:80:inconst_missing’
from /home/michal/.gem/ruby/1.8/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:92:in `const_missing’
from (irb):4
Mechanizm autoloading (czyli ten active_support/dependencies.rb:426:in `load_missing_constant’) przechwytuje wyjątek, który pierwotnie sprawił problem, a potem sam stwierdza, że mimo wczytania pliku zdefiniowanej klasy nadal nie ma. Wtedy rzuca ten swój LoadError.
Ty chcesz się dowiedzieć co sprawiło, że klasa User nie została zdefiniowana. Zazwyczaj jest to jakaś literówka w kodzie lub inny błąd składni. Ale ponieważ napisałeś, że ten sam kod działał pod Windozą, podejrzewam, że problem należy raczej do grupy błędów zależnych od systemu. Stąd moja sugestia z backslashem w ścieżce - ale to tylko strzał w ciemno.
Jeśli zrobisz z konsoli ‘require user.rb’ zobaczysz nieprzechwycony pierwotny błąd rzucony przez coś w pliku user.rb.
Dzięki za okazaną pomoc. Problem był taki, że gdy pisałem na Windowsie pod Netbeans nie wiem czemu zapisywał końce linii jakby to był system MacOs. Musiałem plik zapisać z końcem linii Unix i dopiero wtedy nie wywalił żadnego błędu. Fajnie, że wszystko dobrze się skończyło, no ale taki błąd a pół dnia zmarnowane.