Başlatılmamış sabit ActiveSupport :: Bağımlılıklar :: Mutex (NameError)


238

Bir Ruby on Rails projesi oluşturmak istediğimde, aşağıdaki mesajı alıyorum.

/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

Neler yanlış gitti? Nasıl düzeltebilirim?


Çıktısını gönderebilir misiniz gem --version?
Andrew Marshall

Yanıtlar:


137

Bu Rails 2.3.8 ve RubyGems'in son sürümleri arasındaki bir uyumsuzluktur. En son 2.3 sürümüne yükseltin (bugün itibariyle 2.3.11).


211

Ruby on Rails 2.3.11 sürümüne geçemiyorsanız (ve douglasr'ın cevabını genişletmek için) threaden üstte olmalıdır boot.rb. Örneğin:

require 'thread'

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

28
Kendi başına eklemek daha da kolaydır boot.rb.
nathanvda

12
Boot.rb dosyasına eklemek aslında doğru cevap olmalıdır.
radiospiel

1
nasıl iplik gerektiren eklemek? Hangi dosyada? Yani, ray projesi yapılmadı. Çekirdekteki değişiklik mi?
alfizqu

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

Ben config / boot.rb ekledim ama benim için çalışmadı. Nereye eklemeliyim?
Amrit Dhungana

158

RubyGems 1.6.0+ ve Rails <2.3.11 ile olduğu için RubyGems'i 1.5.3'e düşürerek bu sorunu çözebildim.

gem update --system 1.5.3

Daha önce daha eski bir sürüme geçtiyseniz ve 1.5.3 sürümüne güncellemek istiyorsanız, bunu çalıştırmaya çalışırken aşağıdakileri alabilirsiniz:

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

Bu hatayı alırsanız, sürümü belirtmenize izin verecek şekilde güncelleyin ve tekrar eski sürüme geçin:

gem update --system
gem update --system 1.5.3

2
Raylar 3 + Rubygems 1.6+ yaptıktan sonra 2.3.5 raylar uygulaması çalıştırmada sorun vardı. Bu çözüldü, teşekkürler.
RoR

4
Benim için çalışmıyor ... undefined local variable or method version_requirements for #<Rails::GemDependency:0x2b001603fe30>
Ray301

Teşekkür ederim! Benim için de çalışın:]
mr.pppoe

4
@aaron komutumu sudo eklemek için cevabımı düzenlediniz, ancak afaik sudo her zaman uygun değil (rvm, vb. kullanırken olduğu gibi). İnsanlar gerektiği gibi ekleyebilir.
Gary S. Weaver

5
veya rvm kullanıyorsanız (geri dönüp eski kod tabanlarını desteklemeniz gerektiğinde idealdir!): rvm rubygems 1.5.3
tardate


24

Sürümünüzü raylar gibi aynı tutmak istiyorsanız 2.3.8 ve mücevher sürümü en son olacak. Bu çözümü Rails2.x ile kullanabilirsiniz . Bu, boot.rb dosyasında ve environment.rb dosyasında bazı değişiklikler.

require 'thread'üstündeki boot.rb dosyasında.

ve environment.rb dosyasında başlatıcı bloğunun üstüne aşağıdaki kodu ekleyin.

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
Teşekkürler, bunu benim için yapan tek çözüm bu.
Christopher Pickslay

11

3> raylarla çalıştıktan sonra eski bir ray 2.3.5 projesini başlatmaya çalıştığımda birçok kez bu problemle karşılaştım. Benim durumumda sorunu çözmek için, 1.4.2 sürümüne bir rubygems güncellemesi yapmalıyım, bu:

sudo gem update --system 1.4.2

Bu bizim için en iyi çözümdür, çünkü raylar sürümü değiştirilemez, bunu güncellemekle çok fazla ilgilenir, ancak mücevher versiyonunu değiştirmek güzel ve kolaydır!
Ian Vaughan

6

Radiant CMS kullanıyorsanız,

require 'thread'

en üste config/boot.rb.

(Aaron'un ve nathanvda'nın tepkileri için Kudos.)


3

Belirtildiği gibi bu, Ruby on Rails sürüm 3'ten önceki sürümlerde RubyGems 1.6.0 kullanıldığında gerçekleşir. Uygulamam, projenin / satıcısında satılan Ruby on Rails 2.3.3 kullanıyor.

Şüphesiz Ruby on Rails'in daha yeni bir 2.3.X sürümüne yükseltilmesi de bu sorunu çözebilir. Ancak, bu sorun, Ruby on Rails'i açmak ve yükseltmek için Rake çalıştırmanızı önler .

Environment.rb dosyasının üst kısmına 'thread' eklenmesi sorunu benim için çözmedi. /Vendor/rails/activesupport/lib/active_support.rb dosyasına 'iş parçacığı' eklenmesi sorunu çözdü.


3

Ruby on Rails sürümünüzü v3.0.5 olarak güncellemeyi deneyin:

gem install rails --version 3.0.5

veya v2.3.11:

gem install rails --version 2.3.11

Bu yeni bir proje değilse uygulamanızı uygun şekilde yükseltmeniz gerekir. Yeni bir projeyse, oluşturduğunuz dizini silin ve tekrar yeni bir proje oluşturun.



-1

Orada uykusuz kalan diğer ruhlar için çözümümü gönderiyorum:

RVM kullanıyorsanız, doğru ruby ​​sürümünü ve gemset'i kullanarak doğru klasörde olup olmadığınızı iki kez kontrol edin. Terminal sekmeleri açık bir dizi vardı ve bunlardan biri farklı bir dizindeydi. "rails console" yazmak varsayılan rails dağıtımım 2.3.x olduğundan hataya neden oldu.

Benim tarafımdaki hatayı fark ettim, doğru dizine cd'd ve gerisini .rvmrc dosyam yaptı.

RVM olduğu değil Git gibi. Git'te, bir kabuktaki dalları değiştirmek her yeri değiştirir. Kelimenin tam anlamıyla söz konusu dosyaları yeniden yazıyor. Öte yandan RVM sadece kabuk değişkenlerini ayarlıyor ve açtığınız her yeni kabuk için ayarlanması gerekiyor.

Herhangi bir dizine .rvmrc'yi bilmiyorsanız, herhangi bir dizine bu ada sahip bir dosya koyabilirsiniz ve rvm dosyayı o dizine her değiştirdiğinizde alır ve burada belirtilen sürümü / gemset'i kullanır. Örnek bir .rvmrc dosyası:

rvm use 1.9.2@turtles

Bu, değerli taş "kaplumbağaları" kullanarak RVM koleksiyonunuzdaki ruby ​​1.9.2'nin en son sürümüne geçecektir. Şimdi Terminal'de yüz sekme açabilirsiniz (sonunda yaptığım gibi) ve asla işaret ettiği yakut sürümü için endişelenmeyin.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.