अनधिकृत निरंतर ActiveSupport :: निर्भरता :: Mutex (NameError)


238

जब मैं रेल परियोजना पर एक रूबी बनाना चाहता हूं, तो मुझे नीचे संदेश प्राप्त होता है।

/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

क्या गलत हो गया है? मैं इसे कैसे ठीक करूं?


आप के उत्पादन पोस्ट कर सकते हैं gem --version?
एंड्रयू मार्शल ने

जवाबों:


137

यह रेल 2.3.8 और रूबीजीम्स के हाल के संस्करणों के बीच एक असंगतता है। नवीनतम 2.3 संस्करण (आज के अनुसार 2.3.11) पर अपग्रेड करें।


211

यदि आप रूबी पर रेलगाड़ियों 2.3.11 (और डगलस के जवाब पर विस्तार करने के लिए) में अपग्रेड नहीं कर सकते हैं thread, तो इसके शीर्ष पर आवश्यक होना चाहिए boot.rb। उदाहरण के लिए:

require 'thread'

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

28
इसे boot.rbस्वयं के शीर्ष पर जोड़ना और भी आसान है।
नथ्नवाड़ा

12
इसे boot.rb में जोड़ना वास्तव में उचित उत्तर होना चाहिए।
रेडियोस्पेल

1
मैं आवश्यकता धागा कैसे जोड़ूं? किस फाइल में? मेरा मतलब है, कोई रेल परियोजना नहीं बनाई गई है। क्या यह कोर में बदलाव है?
alfizqu

@alfizqu, यह फ़ाइल है<RUBYDIR>/lib/ruby/gems/<VERSION>/gems/rails-<VERSION>/environments/boot.rb
JellicleCat

मैंने इसे config / boot.rb में जोड़ दिया है, लेकिन इसका मेरे लिए काम नहीं किया है। मुझे इसे कहां जोड़ना है?
अमृत ​​धुंगाना

158

मैं इसे रूबीजम्स को 1.5.3 पर अपग्रेड करके ठीक करने में सक्षम था, क्योंकि यह रूबीजीम्स 1.6.0+ और रेल्स <2.3.11 के साथ होता है।

gem update --system 1.5.3

यदि आपने पहले भी एक पुराने संस्करण में डाउनग्रेड किया था और 1.5.3 पर अपडेट करना चाहते हैं, तो आपको निम्नलिखित मिल सकता है जब आप इसे चलाने की कोशिश कर रहे हैं:

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

यदि आपको वह त्रुटि मिलती है, तो अपडेट करें, ताकि वह आपको संस्करण निर्दिष्ट कर सके, और फिर डाउनग्रेड कर सके:

gem update --system
gem update --system 1.5.3

2
3 + Rubygems 1.6+ रेल होने के बाद 2.3.5 रेल एप्लिकेशन चलाने के साथ समस्या थी। यह इसे हल किया, धन्यवाद।
RoR

4
यह मेरे लिए काम नहीं कर रहा है ... undefined local variable or method version_requirements for #<Rails::GemDependency:0x2b001603fe30>
Ray301

धन्यवाद! मेरे लिए भी काम करें:]
mr.pppoe

4
@ वरन आपने आज्ञाओं के सामने सुडो को जोड़ने के लिए मेरा उत्तर संपादित किया, लेकिन afaik sudo हमेशा उपयुक्त नहीं होता है (जैसे कि rvm का उपयोग करते समय, आदि)। लोग आवश्यकतानुसार इसमें जोड़ सकते हैं।
गैरी एस बुनकर

5
या यदि आप आरवीएम का उपयोग कर रहे हैं (आदर्श है जब वापस जाने की आवश्यकता हो और पुराने कोड आधारों का समर्थन करें!):
आरवीएम रूबगम्स

35

आप अपने आवेदन में 'धागा' की आवश्यकता के अनुसार इस मुद्दे को प्राप्त कर सकते हैं:

require 'thread'

RubyGems 1.6.0 के अनुसार नोट्स जारी करें


24

यदि आप अपने संस्करण को उसी तरह रखना चाहते हैं जैसे रेल 2.3.8 होगी और मणि संस्करण नवीनतम होगा। आप इस समाधान का उपयोग नवीनतम रत्न Rails2.x के साथ कर सकते हैं । इसमें boot.rb फ़ाइल और environment.rb फ़ाइल के कुछ बदलाव हैं।

require 'thread'सबसे ऊपर boot.rb फ़ाइल में।

और environment.rb फ़ाइल में इनिलाइज़र ब्लॉक के ऊपर निम्न कोड जोड़ें।

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
धन्यवाद, यह एकमात्र समाधान है जो उसने मेरे लिए किया।
क्रिस्टोफर पिक्सले

11

जब मैं रेल 3> के साथ काम करने के बाद एक पुरानी रेल 2.3.5 परियोजना शुरू करने की कोशिश करता हूं, तो मुझे कई अवसरों में इस समस्या का सामना करना पड़ा है। समस्या को हल करने के लिए मेरे मामले में, मुझे 1.4.2 संस्करण के लिए एक रूबीमेग अपडेट करना चाहिए, यह है:

sudo gem update --system 1.4.2

यह हमारे लिए सबसे अच्छा समाधान है, क्योंकि रेल संस्करण परिवर्तित नहीं हो सकता है, बहुत ज्यादा इसे अद्यतन करने के साथ शामिल है, लेकिन मणि संस्करण को बदलना, अच्छा और आसान है!
इयान वॉन

6

यदि आप रेडिएंट CMS का उपयोग कर रहे हैं, तो बस जोड़ें

require 'thread'

के शीर्ष पर है config/boot.rb

(आरोन और नत्थवडा की प्रतिक्रियाओं के लिए कुदोस।)


3

जैसा कि यह उल्लेख किया गया है जब संस्करण 3 से पहले रूबी संस्करण पर रूबी के साथ रूबीजी 1.6.0 का उपयोग किया जाता है। मेरा ऐप रूबी पर रूबी का उपयोग कर रहा है।

इसमें कोई शक नहीं कि रूबी के एक नए 2.3.X संस्करण पर रूबी के उन्नयन से भी इस समस्या का समाधान हो सकता है। हालांकि, इस समस्या को रोकता है, आपके द्वारा चलाए रैक पर रेल unvendor रूबी के लिए और यह उन्नयन।

पर्यावरण के शीर्ष पर 'थ्रेड' की आवश्यकता को जोड़ना। मेरे लिए समस्या को ठीक नहीं किया गया। /Vendor/rails/activesupport/lib/active_support.rb पर 'थ्रेड' जोड़ने से समस्या ठीक हो गई।


3

अपने रूबी को रेल संस्करण पर v3.0.5 में अपडेट करने का प्रयास करें:

gem install rails --version 3.0.5

या v2.3.11:

gem install rails --version 2.3.11

यदि यह एक नई परियोजना नहीं है, तो आपको अपने आवेदन को उसी के अनुसार अपग्रेड करना होगा। यदि यह एक नई परियोजना थी, तो केवल उस निर्देशिका को हटा दें जिसे आपने बनाया था और फिर से एक नई परियोजना बनाएँ।



-1

मैं अन्य नींद से वंचित आत्माओं के लिए अपना समाधान पोस्ट कर रहा हूं:

यदि आप आरवीएम का उपयोग कर रहे हैं, तो सही माणिक संस्करण और रत्नसेट का उपयोग करके जांच लें कि आप सही फ़ोल्डर में हैं। मेरे पास एक टर्मिनल टैब खुला था, और उनमें से एक अलग निर्देशिका में था। टाइपिंग "रेल्स कंसोल" ने त्रुटि उत्पन्न की क्योंकि मेरी डिफ़ॉल्ट रेल डिस्ट्रो 2.3.x है।

मैंने अपने हिस्से में त्रुटि देखी, सही निर्देशिका के लिए cd'd, और मेरी .rvmrc फ़ाइल ने बाकी काम किया।

RVM Git की तरह नहीं है। गिट में, एक खोल में बदलती शाखाएं इसे हर जगह बदलती हैं। यह शाब्दिक रूप से विचाराधीन फाइलों को फिर से लिखना है। दूसरी ओर, आरवीएम, केवल शेल वेरिएबल सेट कर रहा है, और आपके द्वारा खोले गए प्रत्येक नए शेल के लिए सेट होना चाहिए।

यदि आप .rvmrc से परिचित नहीं हैं, तो आप किसी भी डायरेक्टरी में उस नाम के साथ एक फ़ाइल डाल सकते हैं, और आरवीएम उसे उठाएगा और जब भी आप उस डाइरेक्टरी में बदलेंगे, उसमें दिए गए संस्करण / रत्न का उपयोग करें। यहाँ एक नमूना है .rvmrc फ़ाइल:

rvm use 1.9.2@turtles

यह अपने आरवीएम संग्रह में रूबी 1.9.2 के नवीनतम संस्करण पर स्विच करेगा, जो "कछुए" का उपयोग करेगा। अब आप टर्मिनल में सौ टैब खोल सकते हैं (जैसा कि मैं समाप्त कर रहा हूं) और कभी भी रूबी संस्करण के बारे में चिंता न करें जो इसे इंगित कर रहा है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.