Kiedy chcę utworzyć projekt Ruby on Rails, otrzymuję komunikat poniżej.
/usr/lib/ruby/gems/1.8/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:55: uninitialized constant ActiveSupport::Dependencies::Mutex (NameError)
from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require'
from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:36:in `require'
from /usr/lib/ruby/gems/1.8/gems/activesupport-2.3.8/lib/active_support.rb:57
from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require'
from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:36:in `require'
from /usr/lib/ruby/gems/1.8/gems/rails-2.3.8/lib/rails_generator.rb:31
from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require'
from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:36:in `require'
from /usr/lib/ruby/gems/1.8/gems/rails-2.3.8/bin/rails:15
from /usr/bin/rails:19:in `load'
from /usr/bin/rails:19
Co poszło nie tak? Jak to naprawić?
ruby-on-rails
rubygems
compatibility
Sokmesa Khiev
źródło
źródło
gem --version
?Odpowiedzi:
Jest to niezgodność między Railsami 2.3.8 a najnowszymi wersjami RubyGems. Uaktualnij do najnowszej wersji 2.3 (obecnie wersja 2.3.11).
źródło
Jeśli nie możesz uaktualnić do Ruby on Rails 2.3.11 (i rozwinąć odpowiedź Douglasra),
thread
musisz go znaleźć na górzeboot.rb
. Na przykład:źródło
boot.rb
.<RUBYDIR>/lib/ruby/gems/<VERSION>/gems/rails-<VERSION>/environments/boot.rb
Udało mi się to naprawić, obniżając RubyGems do 1.5.3, ponieważ dzieje się tak w RubyGems 1.6.0+ i Railsach <2.3.11:
Jeśli wcześniej dokonałeś przejścia na wcześniejszą wersję i chcesz zaktualizować do wersji 1.5.3, możesz spróbować uzyskać następujące informacje:
Jeśli pojawi się ten błąd, zaktualizuj, aby umożliwić określenie wersji, a następnie ponownie obniżyć wersję:
źródło
undefined local variable or method version_requirements for #<Rails::GemDependency:0x2b001603fe30>
Prawdopodobnie możesz obejść ten problem, wymagając „wątku” w aplikacji jako takiego:
Jak na rubygems 1.6.0 Release Notes .
źródło
Jeśli chcesz zachować tę samą wersję, jak szyny, będzie 2.3.8, a wersja klejnotów będzie najnowsza. Możesz użyć tego rozwiązania Najnowszy klejnot w Rails2.x . w tym niektóre zmiany w pliku boot.rb i pliku environment.rb.
require 'thread
'w pliku boot.rb u góry.i w pliku environment.rb dodaj następujący kod powyżej bloku inicjalizującego.
źródło
Napotkałem ten problem przy wielu okazjach, kiedy próbowałem uruchomić stary projekt szyn 2.3.5 po pracy z szynami 3>. W moim przypadku, aby rozwiązać problem, muszę wykonać aktualizację Rubygems do wersji 1.4.2, to jest:
źródło
Jeśli korzystasz z Radiant CMS, po prostu dodaj
na szczyt
config/boot.rb
.(Uznanie dla odpowiedzi Aarona i Natanavdy).
źródło
Jak wspomniano, dzieje się tak podczas korzystania z RubyGems 1.6.0 z Ruby on Rails w wersji wcześniejszej niż wersja 3. Moja aplikacja używa Ruby on Rails 2.3.3 dostarczonej do / vendor projektu.
Bez wątpienia aktualizacja Ruby on Rails do nowszej wersji 2.3.X może również rozwiązać ten problem. Jednak ten problem uniemożliwia uruchomienie Rake w celu wycofania Ruby on Rails i uaktualnienia go.
Dodanie wymaga „wątku” na początku środowiska. Rb nie rozwiązało problemu dla mnie. Dodanie wymaga „wątku” do /vendor/rails/activesupport/lib/active_support.rb naprawiło problem.
źródło
Spróbuj zaktualizować wersję Ruby on Rails do wersji 3.0.5:
lub v2.3.11:
Jeśli nie jest to nowy projekt, musisz odpowiednio zaktualizować aplikację. Jeśli był to nowy projekt, wystarczy usunąć katalog, w którym go utworzono i ponownie utworzyć nowy projekt.
źródło
zaktualizuj rubygemy
aktualizacja klejnotów - system
źródło
Zamieszczam moje rozwiązanie dla innych dusz pozbawionych snu:
Jeśli używasz RVM, sprawdź dwukrotnie, czy jesteś w odpowiednim folderze, używając poprawnej wersji ruby i zestawu gem. Miałem otwarty szereg kart terminali, a jedna z nich znajdowała się w innym katalogu. wpisanie „konsoli szyn” spowodowało błąd, ponieważ moją domyślną dystrybucją szyn jest 2.3.x.
Zauważyłem błąd z mojej strony, zapisałem cd do właściwego katalogu, a resztą zajął się mój plik .rvmrc.
RVM nie jest jak Git. W git zmiana gałęzi w jednej powłoce zmienia to wszędzie. Dosłownie przepisuje dane pliki. RVM, z drugiej strony, po prostu ustawia zmienne powłoki i musi być ustawione dla każdej nowej otwieranej powłoki.
Jeśli nie znasz .rvmrc, możesz umieścić plik o tej nazwie w dowolnym katalogu, a rvm go pobierze i użyje podanej w nim wersji / zestawu gemset za każdym razem, gdy przejdziesz do tego katalogu. Oto przykładowy plik .rvmrc:
Spowoduje to przejście do najnowszej wersji Ruby 1.9.2 w Twojej kolekcji RVM, przy użyciu zestawu gemt „turtles”. Teraz możesz otworzyć sto kart w Terminalu (tak jak ja to robię) i nigdy nie martw się o wersję ruby, na którą wskazuje.
źródło