Lorsque je veux créer un projet Ruby sur 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 résoudre ce problème?
Il s'agit d'une incompatibilité entre Rails 2.3.8 et les versions récentes de RubyGems. Passez à la dernière version 2.3 (2.3.11 à ce jour).
Si vous ne pouvez pas passer à Ruby sur Rails 2.3.11 (et pour développer la réponse de douglasr), thread
doit être requis en haut de boot.rb
. Par exemple:
require 'thread'
# Don't change this file!
# Configure your app in config/environment.rb and config/environments/*.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:
gem update --system 1.5.3
Si vous aviez précédemment rétrogradé vers une version encore antérieure et souhaitez mettre à jour vers la version 1.5.3, vous pouvez obtenir les éléments suivants lorsque vous essayez de l'exécuter:
Updating RubyGems
ERROR: While executing gem ... (RuntimeError)
No gem names are allowed with the --system option
Si vous obtenez cette erreur, mettez-la à jour afin qu'elle vous permette de spécifier la version, puis rétrograde à nouveau:
gem update --system
gem update --system 1.5.3
Vous pouvez également contourner ce problème en exigeant la présence d'un "fil" dans votre application en tant que tel:
require 'thread'
Selon RubyGems 1.6.0 notes de version .
Si vous souhaitez conserver votre version identique à Rails, la version 2.3.8 sera utilisée et la version la plus récente. Vous pouvez utiliser cette solution Dernière gemme avec Rails2.x . en cela quelques modifications dans les fichiers boot.rb et 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.
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.3.7')
module Rails
class GemDependency
def requirement
r = super
(r == Gem::Requirement.default) ? nil : r
end
end
end
end
J'ai souvent rencontré ce problème lorsque j'essayais de démarrer un ancien projet Rails 2.3.5 après avoir travaillé avec Rails 3>. Dans mon cas, pour résoudre le problème, je dois effectuer une mise à jour de rubygems vers la version 1.4.2, à savoir:
Sudo gem update --system 1.4.2
Si vous utilisez Radiant CMS, ajoutez simplement
require 'thread'
au sommet de config/boot.rb
.
(Félicitations aux réponses d'Aaron et de Nathanvda.)
Essayez de mettre à jour votre version de Ruby sur Rails vers la v3.0.5:
gem install Rails --version 3.0.5
ou v2.3.11:
gem install Rails --version 2.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.
Comme mentionné, cela se produit lors de l'utilisation de RubyGems 1.6.0 avec la version Ruby sur Rails antérieure à la version 3. Mon application utilise Ruby sur Rails 2.3.3 vendu dans le/vendeur du projet.
Une mise à niveau de Ruby sur Rails vers une version 2.3.X plus récente peut sans doute résoudre ce problème. Cependant, ce problème vous empêche d’exécuter Rake sur unvendor Ruby sur Rails et de le mettre à niveau.
L'ajout de require 'thread' au sommet de environment.rb n'a pas résolu le problème pour moi. L'ajout de require 'thread' dans /vendor/Rails/activesupport/lib/active_support.rb a résolu le problème.
mettre à jour les rubygems
gem mise à jour --system