Wenn ich ein Ruby on Rails-Projekt erstellen möchte, wird die folgende Meldung angezeigt.
/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
Was ist schief gelaufen? Wie kann ich das Problem beheben?
ruby-on-rails
rubygems
compatibility
Sokmesa Khiev
quelle
quelle
gem --version
?Antworten:
Dies ist eine Inkompatibilität zwischen Rails 2.3.8 und neueren Versionen von RubyGems. Upgrade auf die neueste Version 2.3 (2.3.11 ab heute).
quelle
Für den Fall, dass Sie kein Upgrade auf Ruby on Rails 2.3.11 durchführen können (und um die Antwort von Douglas zu erweitern),
thread
muss oben auf erforderlich seinboot.rb
. Beispielsweise:quelle
boot.rb
.<RUBYDIR>/lib/ruby/gems/<VERSION>/gems/rails-<VERSION>/environments/boot.rb
Ich konnte dies beheben, indem ich RubyGems auf 1.5.3 herunterstufte, da dies bei RubyGems 1.6.0+ und Rails <2.3.11 der Fall ist:
Wenn Sie zuvor ein Downgrade auf eine noch frühere Version durchgeführt haben und auf 1.5.3 aktualisieren möchten, wird beim Versuch, dies auszuführen, möglicherweise Folgendes angezeigt:
Wenn Sie diesen Fehler erhalten, aktualisieren Sie ihn, damit Sie die Version angeben können, und führen Sie dann ein Downgrade durch:
quelle
undefined local variable or method version_requirements for #<Rails::GemDependency:0x2b001603fe30>
Sie können dieses Problem wahrscheinlich auch umgehen, indem Sie in Ihrer Anwendung als solche "Thread" benötigen:
Gemäß dem RubyGems 1.6.0 Release Notes .
quelle
Wenn Sie Ihre Version beibehalten möchten, wird Rails 2.3.8 und Gem Version die neueste Version sein. Sie können diese Lösung Neuestes Juwel mit Rails2.x verwenden . in diesem einige Änderungen in der Datei boot.rb und der Datei environment.rb.
require 'thread
'in der Datei boot.rb oben.Fügen Sie in der Datei environment.rb den folgenden Code über dem Initialisierungsblock hinzu.
quelle
Ich habe dieses Problem in vielen Fällen festgestellt, als ich versuchte, ein altes Rails 2.3.5-Projekt zu starten, nachdem ich mit Rails 3> gearbeitet hatte. In meinem Fall muss ich zur Lösung des Problems ein Rubygems-Update auf Version 1.4.2 durchführen. Dies ist:
quelle
Wenn Sie Radiant CMS verwenden, fügen Sie einfach hinzu
an die Spitze von
config/boot.rb
.(Ein großes Lob an die Antworten von Aaron und Nathanvda.)
quelle
Wie bereits erwähnt, tritt dies auf, wenn RubyGems 1.6.0 mit einer früheren Ruby on Rails-Version als Version 3 verwendet wird. Meine App verwendet Ruby on Rails 2.3.3, das in den / Anbieter des Projekts übertragen wurde.
Zweifellos kann ein Upgrade von Ruby on Rails auf eine neuere Version 2.3.X auch dieses Problem beheben. Dieses Problem verhindert jedoch, dass Sie Rake ausführen, um Ruby on Rails freizugeben und zu aktualisieren.
Das Hinzufügen von require 'thread' oben in der Umgebung.rb hat das Problem für mich nicht behoben. Das Hinzufügen von require 'thread' zu /vendor/rails/activesupport/lib/active_support.rb hat das Problem behoben.
quelle
Versuchen Sie, Ihre Ruby on Rails-Version auf Version 3.0.5 zu aktualisieren:
oder v2.3.11:
Wenn dies kein neues Projekt ist, müssen Sie Ihre Anwendung entsprechend aktualisieren. Wenn es sich um ein neues Projekt handelt, löschen Sie einfach das Verzeichnis, in dem Sie es erstellt haben, und erstellen Sie erneut ein neues Projekt.
quelle
Aktualisieren Sie die Rubygems
gem update --system
quelle
Ich poste meine Lösung für die anderen Seelen mit Schlafmangel da draußen:
Wenn Sie RVM verwenden, überprüfen Sie anhand der richtigen Ruby-Version und des richtigen Gemset, ob Sie sich im richtigen Ordner befinden. Ich hatte eine Reihe von Terminal-Registerkarten geöffnet, und eine davon befand sich in einem anderen Verzeichnis. Die Eingabe von "Rails Console" verursachte den Fehler, da meine Standard-Rails-Distribution 2.3.x ist.
Ich bemerkte den Fehler meinerseits, legte eine CD in das richtige Verzeichnis und meine .rvmrc-Datei erledigte den Rest.
RVM ist nicht wie Git. In git ändert sich das Ändern von Zweigen in einer Shell überall. Es geht buchstäblich darum, die fraglichen Dateien neu zu schreiben. RVM hingegen legt nur Shell-Variablen fest und muss für jede neue Shell festgelegt werden, die Sie öffnen.
Falls Sie mit .rvmrc nicht vertraut sind, können Sie eine Datei mit diesem Namen in ein beliebiges Verzeichnis einfügen. Rvm nimmt sie auf und verwendet die darin angegebene Version / Gemset, wenn Sie in dieses Verzeichnis wechseln. Hier ist ein Beispiel für eine .rvmrc-Datei:
Dadurch wird auf die neueste Version von Ruby 1.9.2 in Ihrer RVM-Sammlung umgeschaltet, wobei das Gemset "Turtles" verwendet wird. Jetzt können Sie im Terminal hundert Registerkarten öffnen (wie ich es am Ende tue) und sich keine Sorgen mehr über die Ruby-Version machen, auf die es zeigt.
quelle