Costante non inizializzata ActiveSupport :: Dependencies :: Mutex (NameError)

Quando voglio creare un progetto Ruby on Rails, ottengo il messaggio qui sotto.

/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 

Cosa è andato storto? Come posso risolverlo?

Questa è un’incompatibilità tra Rails 2.3.8 e versioni recenti di RubyGems. Passa alla versione 2.3 più recente (2.3.11 ad oggi).

Nel caso in cui non è ansible eseguire l’aggiornamento a Ruby on Rails 2.3.11 (e per espandere la risposta di douglasr), il thread deve essere richiesto nella parte superiore di boot.rb Per esempio:

 require 'thread' # Don't change this file! # Configure your app in config/environment.rb and config/environments/*.rb ... 

Sono stato in grado di risolvere questo problema effettuando il downgrade di RubyGems alla versione 1.5.3, poiché si verifica con RubyGems 1.6.0+ e Rails <2.3.11:

 gem update --system 1.5.3 

Se avevi precedentemente eseguito il downgrade a una versione ancora precedente e desideri eseguire l’aggiornamento alla versione 1.5.3, potresti provare quanto segue quando provi ad eseguirlo:

 Updating RubyGems ERROR: While executing gem ... (RuntimeError) No gem names are allowed with the --system option 

Se ricevi questo errore, quindi aggiorna, in modo che ti consenta di specificare la versione e quindi eseguire nuovamente il downgrade:

 gem update --system gem update --system 1.5.3 

Puoi anche probabilmente aggirare questo problema richiedendo ‘thread’ nella tua applicazione in quanto tale:

 require 'thread' 

Secondo le note di rilascio di RubyGems 1.6.0.

Se vuoi mantenere la tua versione come i binari sarà 2.3.8 e la versione gem sarà l’ultima. È ansible utilizzare questa soluzione Ultimo gioiello con Rails2.x . in questo alcune modifiche nel file boot.rb e nel file environment.rb.

require 'thread ‘ nel file boot.rb nella parte superiore.

e nel file environment.rb aggiungere il seguente codice sopra il blocco di inizializzazione.

 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 

Ho affrontato questo problema in molte occasioni quando provo ad avviare un vecchio progetto di binari 2.3.5 dopo aver lavorato con i binari 3>. Nel mio caso per risolvere il problema, devo fare un aggiornamento Rubygems alla versione 1.4.2, questo è:

 sudo gem update --system 1.4.2 

Se stai usando Radiant CMS, aggiungi semplicemente

 require 'thread' 

all’inizio di config/boot.rb

(Complimenti per le risposte di Aaron e di Nathanvda.)

Come accennato, ciò si verifica quando si utilizza RubyGems 1.6.0 con la versione di Ruby on Rails precedente alla versione 3. La mia app utilizza Ruby on Rails 2.3.3 venduta nel / vendor del progetto.

Senza dubbio un aggiornamento di Ruby on Rails a una versione 2.3.X più recente potrebbe risolvere anche questo problema. Tuttavia, questo problema ti impedisce di eseguire Rake per annullare Ruby on Rails e aggiornarlo.

L’aggiunta di require ‘thread’ all’inizio di environment.rb non ha risolto il problema per me. L’aggiunta di require ‘thread’ a /vendor/rails/activesupport/lib/active_support.rb ha risolto il problema.

Prova ad aggiornare la tua versione di Ruby on Rails alla v3.0.5:

 gem install rails --version 3.0.5 

o v2.3.11:

 gem install rails --version 2.3.11 

Se questo non è un nuovo progetto, dovrai aggiornare la tua applicazione di conseguenza. Se si trattava di un nuovo progetto, è sufficiente eliminare la directory in cui è stato creato e creare nuovamente un nuovo progetto.

aggiorna i rubygems

gem update – system

Sto postando la mia soluzione per le altre anime private del sonno:

Se stai usando RVM, verifica di essere nella cartella corretta, usando la versione ruby ​​corretta e gemset. Avevo una serie di tabs terminali aperte e una di queste era in una directory diversa. digitando “rails console” ha generato l’errore perché la mia distro rails predefinita è 2.3.x.

Ho notato l’errore da parte mia, cd’d nella directory corretta, e il mio file .rvmrc ha fatto il resto.

RVM non è come Git. In git, cambiare rami in una shell lo cambia ovunque. Sta letteralmente riscrivendo i file in questione. RVM, d’altra parte, sta semplicemente impostando le variabili di shell e deve essere impostato per ogni nuova shell aperta.

Nel caso in cui non si abbia familiarità con .rvmrc, è ansible inserire un file con quel nome in qualsiasi directory e rvm lo rileverà e utilizzerà la versione / gemset specificata al suo interno, ogni volta che si passa a tale directory. Ecco un esempio di file .rvmrc:

 rvm use [email protected] 

Passerà all’ultima versione di Ruby 1.9.2 nella raccolta RVM, utilizzando il gemset “tartarughe”. Ora puoi aprire un centinaio di tabs in Terminale (come finisco per fare) e non preoccuparti mai della versione ruby ​​a cui punta.