Lorsque je veux créer un projet Ruby on Rails, je reçois le message ci-dessous.
/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
Qu'est-ce qui a mal tourné? Comment puis-je le réparer?
ruby-on-rails
rubygems
compatibility
Sokmesa Khiev
la source
la source
gem --version
?Réponses:
Il s'agit d'une incompatibilité entre Rails 2.3.8 et les versions récentes de RubyGems. Mettez à niveau vers la dernière version 2.3 (2.3.11 à partir d'aujourd'hui).
la source
Dans le cas où vous ne pouvez pas passer à Ruby on Rails 2.3.11 (et étendre la réponse de douglasr),
thread
doit être requis en haut deboot.rb
. Par exemple:la source
boot.rb
lui - même.<RUBYDIR>/lib/ruby/gems/<VERSION>/gems/rails-<VERSION>/environments/boot.rb
J'ai pu résoudre ce problème en rétrogradant RubyGems à 1.5.3, car cela se produit avec RubyGems 1.6.0+ et Rails <2.3.11:
Si vous aviez précédemment rétrogradé vers une version encore plus ancienne et que vous souhaitez mettre à jour vers 1.5.3, vous pourriez obtenir ce qui suit lorsque vous essayez de l'exécuter:
Si vous obtenez cette erreur, mettez-la à jour, afin qu'elle vous permette de spécifier la version, puis rétrogradez à nouveau:
la source
undefined local variable or method version_requirements for #<Rails::GemDependency:0x2b001603fe30>
Vous pouvez également contourner ce problème en exigeant un «thread» dans votre application en tant que tel:
Selon les notes de version de RubyGems 1.6.0 .
la source
Si vous voulez garder votre version identique, les rails seront 2.3.8 et la version gem sera la plus récente. Vous pouvez utiliser cette solution Latest gem avec Rails2.x . dans ce quelques modifications dans le fichier boot.rb et le fichier environment.rb.
require 'thread
'dans le fichier boot.rb en haut.et dans le fichier environment.rb, ajoutez le code suivant au-dessus du bloc d'initialisation.
la source
J'ai rencontré ce problème à plusieurs reprises lorsque j'essaie de démarrer un ancien projet de rails 2.3.5 après avoir travaillé avec les rails 3>. Dans mon cas pour résoudre le problème, je dois faire une mise à jour rubygems vers la version 1.4.2, c'est:
la source
Si vous utilisez Radiant CMS, ajoutez simplement
au sommet de
config/boot.rb
.(Bravo aux réponses d'Aaron et de nathanvda.)
la source
Comme mentionné, cela se produit lors de l'utilisation de RubyGems 1.6.0 avec la version Ruby on Rails antérieure à la version 3. Mon application utilise Ruby on Rails 2.3.3 vendue dans le / vendeur du projet.
Une mise à niveau de Ruby on Rails vers une version 2.3.X plus récente peut également résoudre ce problème. Cependant, ce problème vous empêche d'exécuter Rake pour supprimer Ruby on Rails et de le mettre à niveau.
L'ajout de "thread" en haut d'environnement.rb n'a pas résolu le problème pour moi. L'ajout de «thread» requis à /vendor/rails/activesupport/lib/active_support.rb a résolu le problème.
la source
Essayez de mettre à jour votre version de Ruby on Rails vers la v3.0.5:
ou v2.3.11:
S'il ne s'agit pas d'un nouveau projet, vous devrez mettre à niveau votre application en conséquence. S'il s'agissait d'un nouveau projet, supprimez simplement le répertoire dans lequel vous l'avez créé et créez à nouveau un nouveau projet.
la source
mettre à jour les rubygèmes
mise à jour de gemme - système
la source
Je poste ma solution pour les autres âmes privées de sommeil:
Si vous utilisez RVM, vérifiez que vous êtes dans le bon dossier, en utilisant la version rubis et le jeu de gemmes corrects. J'avais ouvert un tableau d'onglets de terminal, et l'un d'eux était dans un répertoire différent. taper "rails console" a produit l'erreur car ma distribution de rails par défaut est 2.3.x.
J'ai remarqué l'erreur de ma part, cd'd dans le bon répertoire, et mon fichier .rvmrc a fait le reste.
RVM n'est pas comme Git. Dans git, changer les branches dans un shell le change partout. C'est réécrire littéralement les fichiers en question. RVM, d'autre part, ne fait que définir des variables de shell, et doit être défini pour chaque nouveau shell que vous ouvrez.
Dans le cas où vous n'êtes pas familier avec .rvmrc, vous pouvez mettre un fichier avec ce nom dans n'importe quel répertoire, et rvm le récupérera et utilisera la version / gemset qui y est spécifiée, chaque fois que vous passez dans ce répertoire. Voici un exemple de fichier .rvmrc:
Cela passera à la dernière version de ruby 1.9.2 dans votre collection RVM, en utilisant le jeu de gemmes "tortues". Maintenant, vous pouvez ouvrir une centaine d'onglets dans Terminal (comme je finis par le faire) et ne jamais vous soucier de la version ruby vers laquelle il pointe.
la source