web-dev-qa-db-fra.com

Constante non initialisée ActiveSupport :: Dependencies :: Mutex (NameError)

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?

237
Sokmesa Khiev

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).

137
John

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
...
211
Aaron

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
158
Gary S. Weaver

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 .

35
douglasr

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
24
arunagw

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
11
Tania R

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.)

6
thekingoftruth

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.

3
Andrew Marshall

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.

3
Paul Grayson

mettre à jour les rubygems

gem mise à jour --system

1
Vishnu Atrai