Ruby 2.0, polecenie 'require'

uaktualniłem ruby z 1.8.7 na 2.0. i za każdym razem gdy próbuję odpalić plik w którym odwołuję sie do innego pliku używając ‘require’, wyskakuje mi taki oto błąd:

.rvm/rubies/ruby-2.0.0-p0/lib/ruby/site_ruby/2.0.0/rubygems/custom_require.rb:36:in require': cannot load such file -- Hands.rb (LoadError) from /.rvm/rubies/ruby-2.0.0-p0/lib/ruby/site_ruby/2.0.0/rubygems/custom_require.rb:36:inrequire’
from bot.rb:1:in `’

drugi dzień nad tym siedze i zaczynam miec juz powoli dosc. znalazłem w necie rady żeby downgrade’owac bundlera, ale gdy wpisuje ‘gem install bundler -pre’ w ogole nie znajduje takiego gema i ma mnie w dupie.
system mountain lion.
aha, tego typu problem miałem uzywając sinatry, i gdy od nowa zainstalowałem… no sinatre, wszystko ładnie chula. tylko nie wiem jaki gem miałbym zainstalowac zeby dzialaly pliki stworzone przeze mnie…

Spróbuj zamiast require użyć require_relative - od ruby 1.9.2 z $LOAD_PATH została usunięta ścieżka ‘.’, przypuszczam że to jest przyczyną błędu u Ciebie.

Tu dwa linki, które mogą Ci się przydać:

require ‘./Hands.rb’ też powinno działać z tego co pamietam.

Tak, też powinno działać.

require_relative zadziałało jak na razie, wielkie dzięki, myślałem że pierdolca dostane od babrania sie z tym szajsem
A tak gwoli ścisłości czemu ma słuzyc taka zmiana, przeciez to wiecej pisania, niby tylko te ‘./’ ale zawsze, niezbyt to ruby way mi sie wydaje

[quote=torrance]require_relative zadziałało jak na razie, wielkie dzięki, myślałem że pierdolca dostane od babrania sie z tym szajsem
A tak gwoli ścisłości czemu ma słuzyc taka zmiana, przeciez to wiecej pisania, niby tylko te ‘./’ ale zawsze, niezbyt to ruby way mi sie wydaje[/quote]
Moje podejrzenia:

  • kwestie bezpieczeństwa (coś w katalogu bieżącym miało zawsze pierwszeństwo przed tym co było zdefiniowane w gem path)
  • spójność z Bundlerem (tzn. jeśli używamy Bundlera to dostępne katalogi są w całości definiowane przez niego).

Nic też nie stoi na przeszkodzie, żeby sobie dopisać:

$:.unshift "."

Wtedy odzyskamy wcześniejsze zachowanie.