Quando eu quero criar um projeto Ruby on Rails, recebo a mensagem abaixo.
/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
O que deu errado? Como faço para corrigi-lo?
ruby-on-rails
rubygems
compatibility
Sokmesa Khiev
fonte
fonte
gem --version
?Respostas:
Essa é uma incompatibilidade entre o Rails 2.3.8 e as versões recentes do RubyGems. Atualize para a versão 2.3 mais recente (2.3.11 a partir de hoje).
fonte
Caso você não possa atualizar para o Ruby on Rails 2.3.11 (e para expandir a resposta de douglasr),
thread
deve ser necessário na parte superiorboot.rb
. Por exemplo:fonte
boot.rb
.<RUBYDIR>/lib/ruby/gems/<VERSION>/gems/rails-<VERSION>/environments/boot.rb
Consegui consertar isso desclassificando o RubyGems para 1.5.3, pois isso acontece com o RubyGems 1.6.0+ e o Rails <2.3.11:
Se você já havia feito o downgrade para uma versão ainda mais anterior e deseja atualizar para a 1.5.3, poderá obter o seguinte ao tentar executar isso:
Se você receber esse erro, atualize para permitir que você especifique a versão e faça o downgrade novamente:
fonte
undefined local variable or method version_requirements for #<Rails::GemDependency:0x2b001603fe30>
Você também pode solucionar esse problema exigindo 'thread' no seu aplicativo, como tal:
Conforme as notas de versão do RubyGems 1.6.0 .
fonte
Se você quiser manter sua versão igual à dos trilhos, será a 2.3.8 e a versão gem será a mais recente. Você pode usar esta solução Gem mais recente com o Rails2.x . neste algumas mudanças no arquivo boot.rb e no arquivo environment.rb.
require 'thread
'no arquivo boot.rb na parte superior.e no arquivo environment.rb, adicione o seguinte código acima do bloco inicializador.
fonte
Eu já enfrentei esse problema em muitas ocasiões quando tento iniciar um projeto antigo do rails 2.3.5 depois de ter trabalhado com o rails 3>. No meu caso, para resolver o problema, devo fazer uma atualização de rubygems para a versão 1.4.2, isto é:
fonte
Se você estiver usando o Radiant CMS, basta adicionar
para o topo de
config/boot.rb
.(Parabéns às respostas de Aaron e nathanvda.)
fonte
Conforme mencionado, isso ocorre ao usar o RubyGems 1.6.0 com a versão Ruby on Rails anterior à versão 3. Meu aplicativo está usando o Ruby on Rails 2.3.3 fornecido no / vendor do projeto.
Sem dúvida, uma atualização do Ruby on Rails para uma versão mais recente do 2.3.X também pode corrigir esse problema. No entanto, esse problema impede que você execute o Rake para remover o fornecedor do Ruby on Rails e atualize-o.
A adição de require 'thread' na parte superior do environment.rb não corrigiu o problema para mim. A inclusão de require 'thread' em /vendor/rails/activesupport/lib/active_support.rb resolveu o problema.
fonte
Tente atualizar sua versão do Ruby on Rails para a v3.0.5:
ou v2.3.11:
Se este não for um projeto novo, você precisará atualizar seu aplicativo adequadamente. Se fosse um novo projeto, exclua o diretório em que você o criou e crie um novo projeto novamente.
fonte
atualizar os rubygems
atualização de gemas - sistema
fonte
Estou postando minha solução para as outras almas privadas de sono por aí:
Se você estiver usando RVM, verifique se está na pasta correta, usando a versão ruby e o gemset corretos. Eu tinha uma variedade de abas de terminal abertas e uma delas estava em um diretório diferente. digitar "console do rails" produziu o erro porque minha distribuição padrão do rails é 2.3.x.
Percebi o erro da minha parte, cd'd para o diretório correto e meu arquivo .rvmrc fez o resto.
O RVM não é como o Git. No git, alterar ramificações em um shell altera em todos os lugares. É literalmente reescrever os arquivos em questão. O RVM, por outro lado, está apenas configurando variáveis do shell e deve ser definido para cada novo shell que você abrir.
Caso você não esteja familiarizado com .rvmrc, você pode colocar um arquivo com esse nome em qualquer diretório, e o rvm o buscará e usará a versão / gemset especificada nele, sempre que você mudar para esse diretório. Aqui está um arquivo .rvmrc de exemplo:
Isso mudará para a versão mais recente do ruby 1.9.2 na sua coleção RVM, usando o gemset "turtles". Agora você pode abrir centenas de guias no Terminal (como eu acabo fazendo) e nunca se preocupar com a versão ruby que está apontando.
fonte