ActiveSupport constante no inicializado :: Dependencias :: Mutex (NameError)


238

Cuando quiero crear un proyecto Ruby on Rails, recibo el siguiente mensaje.

/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é ha salido mal? ¿Cómo lo soluciono?


¿Puedes publicar la salida de gem --version?
Andrew Marshall

Respuestas:


137

Esta es una incompatibilidad entre Rails 2.3.8 y las versiones recientes de RubyGems. Actualice a la última versión 2.3 (2.3.11 a partir de hoy).


211

En caso de que no pueda actualizar a Ruby on Rails 2.3.11 (y ampliar la respuesta de douglasr), threaddebe ser requerido en la parte superior de boot.rb. Por ejemplo:

require 'thread'

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

28
Es aún más fácil agregarlo en la parte superior de boot.rbsí mismo.
nathanvda

12
Agregarlo a boot.rb debería ser la respuesta adecuada.
radiospiel

1
¿Cómo agrego el hilo requerido? En que archivo? Quiero decir, no hay ningún proyecto de rieles creado. ¿Es el cambio en el núcleo?
alfizqu

@alfizqu, el archivo es<RUBYDIR>/lib/ruby/gems/<VERSION>/gems/rails-<VERSION>/environments/boot.rb
JellicleCat

Lo he agregado a config / boot.rb pero no me funcionó. ¿Dónde tengo que agregarlo?
Amrit Dhungana

158

Pude solucionar esto al degradar RubyGems a 1.5.3, ya que sucede con RubyGems 1.6.0+ y Rails <2.3.11:

gem update --system 1.5.3

Si anteriormente había bajado a una versión anterior y desea actualizar a 1.5.3, puede obtener lo siguiente al intentar ejecutar eso:

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

Si obtiene ese error, actualícelo, de modo que le permita especificar la versión, y luego volver a degradarlo:

gem update --system
gem update --system 1.5.3

2
Tuve problemas con la ejecución de una aplicación 2.3.5 rails después de tener rails 3 + Rubygems 1.6+. Esto lo resolvió, gracias.
RoR

44
No está funcionando para mí ... undefined local variable or method version_requirements for #<Rails::GemDependency:0x2b001603fe30>
Ray301

¡Gracias! Trabaja para mí también:]
mr.pppoe

44
@aaron editaste mi respuesta para agregar sudo delante de los comandos, pero afaik sudo no siempre es apropiado (como cuando usas rvm, etc.). Las personas pueden agregarlo según sea necesario.
Gary S. Weaver

55
o si está usando rvm (¡ideal cuando necesita regresar y admitir bases de código antiguas!): rvm rubygems 1.5.3
tarda el

35

También es probable que pueda solucionar este problema requiriendo 'hilo' en su aplicación como tal:

require 'thread'

Según las notas de la versión de RubyGems 1.6.0 .


24

Si desea mantener su versión igual que los rieles será 2.3.8 y la versión de gemas será la última. Puede usar esta solución La última gema con Rails2.x . en esto algunos cambios en el archivo boot.rb y el archivo environment.rb.

require 'thread'en el archivo boot.rb en la parte superior.

y en el archivo environment.rb agregue el siguiente código sobre el bloque inicializador.

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

44
Gracias, esta es la única solución que lo hizo por mí.
Christopher Pickslay

11

Me he enfrentado a este problema en muchas ocasiones cuando intento iniciar un proyecto antiguo de rails 2.3.5 después de haber trabajado con rails 3>. En mi caso para resolver el problema, debo hacer una actualización de rubygems a la versión 1.4.2, esto es:

sudo gem update --system 1.4.2

Esta es la mejor solución para nosotros, ya que la versión de los rieles no puede cambiar, demasiado involucrada con la actualización, pero cambiando la versión de la gema, ¡agradable y fácil!
Ian Vaughan

6

Si está utilizando Radiant CMS, simplemente agregue

require 'thread'

a la cima de config/boot.rb.

(Felicitaciones a las respuestas de Aaron y Nathanvda.)


3

Como se mencionó, esto ocurre cuando uso RubyGems 1.6.0 con Ruby on Rails versión anterior a la versión 3. Mi aplicación está usando Ruby on Rails 2.3.3 distribuido al / proveedor del proyecto.

Sin duda, una actualización de Ruby on Rails a una nueva versión 2.3.X también puede solucionar este problema. Sin embargo, este problema le impide ejecutar Rake para desvelar Ruby on Rails y actualizarlo.

Agregar require 'thread' a la parte superior de environment.rb no me solucionó el problema. Agregar require 'thread' a /vendor/rails/activesupport/lib/active_support.rb solucionó el problema.


3

Intente actualizar su versión de Ruby on Rails a v3.0.5:

gem install rails --version 3.0.5

o v2.3.11:

gem install rails --version 2.3.11

Si este no es un proyecto nuevo, deberá actualizar su aplicación en consecuencia. Si se trataba de un nuevo proyecto, simplemente elimine el directorio en el que lo creó y cree un nuevo proyecto nuevamente.



-1

Estoy publicando mi solución para las otras almas privadas de sueño:

Si está usando RVM, verifique que esté en la carpeta correcta, usando la versión y el conjunto de gemas de ruby ​​correctos. Tenía una serie de pestañas de terminal abiertas, y una de ellas estaba en un directorio diferente. escribir "consola de rails" produjo el error porque mi distribución predeterminada de rails es 2.3.x.

Noté el error de mi parte, lo hice en el directorio correcto y mi archivo .rvmrc hizo el resto.

RVM no es como Git. En git, cambiar ramas en un caparazón lo cambia en todas partes. Literalmente está reescribiendo los archivos en cuestión. RVM, por otro lado, solo está configurando variables de shell, y debe configurarse para cada nuevo shell que abra.

En caso de que no esté familiarizado con .rvmrc, puede colocar un archivo con ese nombre en cualquier directorio, y rvm lo recogerá y usará la versión / conjunto de gemas especificado allí, siempre que cambie a ese directorio. Aquí hay un archivo de muestra .rvmrc:

rvm use 1.9.2@turtles

Esto cambiará a la última versión de ruby ​​1.9.2 en su colección RVM, utilizando las "tortugas" de gemas. Ahora puede abrir un centenar de pestañas en la Terminal (como termino haciendo) y nunca preocuparse por la versión rubí a la que apunta.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.