2011-03-03 14 views
235

Cuando quiero crear un proyecto de Ruby on Rails, obtengo el mensaje a continuación.Constante no inicializada ActiveSupport :: Dependencias :: Mutex (NameError)

/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 resultado mal? ¿Cómo puedo arreglarlo?

+0

Se puede publicar la salida de 'gema --version'? –

Respuesta

137

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

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 esto no es un nuevo proyecto que tendrá que actualizar su aplicación en consecuencia. Si se trataba de un proyecto nuevo, simplemente elimine el directorio donde lo creó y cree un nuevo proyecto nuevamente.

35

También puede probable conseguir alrededor de este problema al requerir 'hilo' en su aplicación como tal:

require 'thread' 

Según el RubyGems 1.6.0 release notes.

3

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

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

Agregar requiere 'hilo' a la parte superior de environment.rb no solucionó el problema para mí. Al agregar require 'thread' a /vendor/rails/activesupport/lib/active_support.rb solucionó el problema.

211

En caso de que no pueda actualizar a Ruby on Rails 2.3.11 (y para ampliar la respuesta de douglasr), debe solicitar thread 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 incluso más fácil agregarlo en la parte superior de 'boot.rb'. – nathanvda

+12

Agregarlo a boot.rb en realidad debería ser la respuesta correcta. – radiospiel

+0

justo en adelante, @nathanvda, funcionó como un encanto! –

23

Si desea mantener su versión igual que los rieles será 2.3.8 y la versión de gema será la más reciente. Puede usar esta solución Latest gem with 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 encima del bloque de inicialización.

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 
+4

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

158

que era capaz de solucionar este degradando RubyGems a 1.5.3, ya que sucede con RubyGems 1.6.0+ y rieles < 2.3.11:

gem update --system 1.5.3 

Si había bajado previamente a una versión incluso anterior y desea actualizar a 1.5.3, es posible que obtenga el siguiente al intentar ejecutar lo siguiente:

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

Si recibe este error, a continuación, actualizar, de manera que le permite especificar la versión, y luego rebajar de nuevo:

gem update --system 
gem update --system 1.5.3 
+2

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

+0

Todavía funciona, gracias –

+4

Funcionó como un encanto. Literalmente, como magia profunda y oscura. – bioneuralnet

6

Si está utilizando CMS radiante, basta con añadir

require 'thread' 

a la parte superior de config/boot.rb.

(Felicitaciones a Aarón y de las respuestas de nathanvda.)

-1

les dejo mi solución para las otras almas con falta de sueño por ahí:

Si está utilizando RVM, vuelva a comprobar que usted' vuelva a la carpeta correcta, usando la versión de ruby ​​y el gemset correctos. Tenía una serie de pestañas de terminal abiertas, y una de ellas estaba en un directorio diferente. escribiendo "rails console" produjo el error porque mi distribución predeterminada de rieles es 2.3.x.

Noté el error por mi parte, cedí al directorio correcto y mi archivo .rvmrc hizo el resto.

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

En caso de que no esté familiarizado con .rvmrc, puede poner un archivo con ese nombre en cualquier directorio, y rvm lo recogerá y usará la versión/gemset especificado allí, cada vez que cambie a ese directorio. A continuación se muestra un archivo .rvmrc:

rvm use [email protected] 

Esto cambiará a la última versión de Ruby 1.9.2 en su colección RVM, utilizando las "tortugas" gemset. Ahora puedes abrir un centenar de pestañas en Terminal (como termino haciéndolo) y nunca preocuparte por la versión de ruby ​​que apunta.

11

He enfrentado este problema en muchas ocasiones cuando trato de iniciar un viejo proyecto de carriles 2.3.5 después de haber trabajado con los rieles 3>. En mi caso, para resolver el problema, hay que hacer una actualización a la versión 1.4.2 rubygems, esto es:

sudo gem update --system 1.4.2 
+0

Esta es la mejor solución para nosotros, como la versión de los rieles no puede cambiar, involucrarse demasiado en actualizar eso, pero cambiar la versión de gema, ¡agradable y fácil! –

1

actualización de los rubygems

actualización

joya --system

Cuestiones relacionadas