2012-02-25 22 views
22

कुछ कारणों से मुझे रेल 3.2 पर स्विच करने के बाद यह त्रुटि मिलनी शुरू हुई। मुझे लगता है कि इसमें एसीएल 9 प्लगइन के साथ कुछ करना है, जिसे मैंने पुनः स्थापित करने का प्रयास किया, लेकिन कुछ भी नहीं बदला।रेल 3.2 अपरिभाषित विधि 'कुंजी?' शून्य के लिए: NilClass

मैंने प्लगइन को lib/plugins में स्थानांतरित कर दिया और कॉन्फ़िगर/प्रारंभकर्ताओं के लिए प्रारंभकर्ता को जोड़ा लेकिन फिर भी, एक ही त्रुटि।

मैंने गिथब पर एसीएल 9 रेपो में समाधान की तलाश की, लेकिन वहां कुछ भी नहीं मिला। शायद यह सब के बाद एसीएल 9 नहीं है।

मेरे पास पेपरक्लिप, एसीएल 9, ऑथलॉगिक स्थापित है।

NoMethodError (undefined method `key?' for nil:NilClass): 
actionpack (3.2.1) lib/action_controller/metal/hide_actions.rb:36:in `visible_action?' 
actionpack (3.2.1) lib/action_controller/metal/hide_actions.rb:18:in `method_for_action' 
actionpack (3.2.1) lib/action_controller/metal/implicit_render.rb:14:in `method_for_action' 
actionpack (3.2.1) lib/action_controller/metal/compatibility.rb:61:in `method_for_action' 
actionpack (3.2.1) lib/abstract_controller/base.rb:115:in `process' 
actionpack (3.2.1) lib/abstract_controller/rendering.rb:45:in `process' 
actionpack (3.2.1) lib/action_controller/metal.rb:203:in `dispatch' 
actionpack (3.2.1) lib/action_controller/metal/rack_delegation.rb:14:in `dispatch' 
actionpack (3.2.1) lib/action_controller/metal.rb:246:in `block in action' 
actionpack (3.2.1) lib/action_dispatch/routing/route_set.rb:66:in `call' 
actionpack (3.2.1) lib/action_dispatch/routing/route_set.rb:66:in `dispatch' 
actionpack (3.2.1) lib/action_dispatch/routing/route_set.rb:30:in `call' 
journey (1.0.3) lib/journey/router.rb:68:in `block in call' 
journey (1.0.3) lib/journey/router.rb:56:in `each' 
journey (1.0.3) lib/journey/router.rb:56:in `call' 
actionpack (3.2.1) lib/action_dispatch/routing/route_set.rb:589:in `call' 
actionpack (3.2.1) lib/action_dispatch/middleware/best_standards_support.rb:17:in `call' 
rack (1.4.1) lib/rack/etag.rb:23:in `call' 
rack (1.4.1) lib/rack/conditionalget.rb:25:in `call' 
actionpack (3.2.1) lib/action_dispatch/middleware/head.rb:14:in `call' 
actionpack (3.2.1) lib/action_dispatch/middleware/params_parser.rb:21:in `call' 
actionpack (3.2.1) lib/action_dispatch/middleware/flash.rb:242:in `call' 
rack (1.4.1) lib/rack/session/abstract/id.rb:205:in `context' 
rack (1.4.1) lib/rack/session/abstract/id.rb:200:in `call' 
actionpack (3.2.1) lib/action_dispatch/middleware/cookies.rb:338:in `call' 
activerecord (3.2.1) lib/active_record/query_cache.rb:64:in `call' 
activerecord (3.2.1) lib/active_record/connection_adapters/abstract/connection_pool.rb:443:in `call' 
actionpack (3.2.1) lib/action_dispatch/middleware/callbacks.rb:28:in `block in call' 
activesupport (3.2.1) lib/active_support/callbacks.rb:405:in `_run__3140920687338355213__call__3168118505970967148__callbacks' 
activesupport (3.2.1) lib/active_support/callbacks.rb:405:in `__run_callback' 
activesupport (3.2.1) lib/active_support/callbacks.rb:385:in `_run_call_callbacks' 
activesupport (3.2.1) lib/active_support/callbacks.rb:81:in `run_callbacks' 
actionpack (3.2.1) lib/action_dispatch/middleware/callbacks.rb:27:in `call' 
actionpack (3.2.1) lib/action_dispatch/middleware/reloader.rb:65:in `call' 
actionpack (3.2.1) lib/action_dispatch/middleware/remote_ip.rb:31:in `call' 
actionpack (3.2.1) lib/action_dispatch/middleware/debug_exceptions.rb:16:in `call' 
actionpack (3.2.1) lib/action_dispatch/middleware/show_exceptions.rb:56:in `call' 
railties (3.2.1) lib/rails/rack/logger.rb:26:in `call_app' 
railties (3.2.1) lib/rails/rack/logger.rb:16:in `call' 
actionpack (3.2.1) lib/action_dispatch/middleware/request_id.rb:22:in `call' 
rack (1.4.1) lib/rack/methodoverride.rb:21:in `call' 
rack (1.4.1) lib/rack/runtime.rb:17:in `call' 
activesupport (3.2.1) lib/active_support/cache/strategy/local_cache.rb:72:in `call' 
rack (1.4.1) lib/rack/lock.rb:15:in `call' 
actionpack (3.2.1) lib/action_dispatch/middleware/static.rb:53:in `call' 
railties (3.2.1) lib/rails/engine.rb:479:in `call' 
railties (3.2.1) lib/rails/application.rb:220:in `call' 
rack (1.4.1) lib/rack/content_length.rb:14:in `call' 
railties (3.2.1) lib/rails/rack/log_tailer.rb:14:in `call' 
rack (1.4.1) lib/rack/handler/webrick.rb:59:in `service' 
/Users/project/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/webrick/httpserver.rb:138:in `service' 
/Users/project/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/webrick/httpserver.rb:94:in `run' 
/Users/project/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/webrick/server.rb:191:in `block in start_thread' 

संपादित करें (हल): यह काफी समय लगा यह पता लगाने की और मैं अभी भी काफी यकीन है कि क्या हुआ नहीं हूं। मुझे लगता है कि इसे रेल 3.1 के लिए एसीएल 9 के समर्थन के साथ करना है, लेकिन अंत में मैंने जिथब से एसीएल 9 कोड लिया और अचानक सबकुछ काम करना शुरू कर दिया।

उत्तर

16

मैं आतंक विरोधी के लिए एक नौसिखिया हूँ और आतंक विरोधी के माध्यम से जा जबकि "आरंभ करें मार्गदर्शिका" एक ही त्रुटि मिली।

यह मूर्खतापूर्ण लग सकता है, लेकिन दूसरों को वही गलती कर सकता है के रूप में मैं कर रहा हूँ, इसलिए पोस्टिंग क्या मैं नौसिखिया की आँखों से आतंक विरोधी में देखा,

validates :name, : presence => true 

नोट ": उपस्थिति", यह होना चाहिए ": उपस्थिति "। अब रेल एक सिंटैक्स त्रुटि फेंकता

C:/blog/app/models/post.rb:4: syntax error, unexpected ':', expecting keyword_end 
validates :name, : presence => true 

लेकिन अगर आप "ताज़ा करें" आपका ब्राउज़र, यह सिंटेक्स त्रुटि छुपाता है, बजाय देता

undefined method `key?' for nil:NilClass 

ऐसा लगता है रेल कैशिंग दोषी है। :)

+0

हाँ वास्तव में आमतौर पर मामला है .. इस तरह मैं कम से कम इस समस्या को पूरा करता हूं। जब तक कोई गहरी अंतर्दृष्टि प्रदान नहीं कर लेता तब तक मैं जवाब स्वीकार करूंगा .. – Stpn

+0

मैं व्यावसायिक रूप से रेल करता हूं, और वैलडिएट अभी भी मान्य नहीं हैं। भविष्य के संदर्भ के लिए – Chris

+0

- एक टाइपो की वजह से एक ही समस्या थी: मैंने मान्यताओं के बजाय मान्य लिखा – nurinur

9

यह आपकी समस्या नहीं हो सकती है क्योंकि ऐसा लगता है कि आपके पास पहले से ही काम करने के लिए कोड था, लेकिन भविष्य के संदर्भ के लिए, मैं अपने मॉडल कोड के अंदर एक साधारण टाइपो के कारण एक ही त्रुटि में भाग गया, जैसे:

class Foo < ActiveRecord::Base 
    validates :content, :length => { maximum => 10 } 
end 

जो किया जाना चाहिए था:

class Foo < ActiveRecord::Base 
    validates :content, :length => { :maximum => 10 } 
end 

नोट "अधिकतम" बनाम ": अधिकतम" - यह ऊपर सटीक शून्य त्रुटि हुई है, और दूर चला गया जब मुझे लगता है कि टाइपो तय की।

6

मैं bmoeskau से सहमत हूं कि आपको बग के लिए अपना मॉडल कोड देखना चाहिए। मेरे आश्चर्य के लिए, मॉडल कभी-कभी रूटिंग चरण के दौरान लोड हो जाते हैं। मैंने पाया:

  1. समस्या का कारण बनने वाला कोड मॉडल में है, नियंत्रक में नहीं, जहां मैं इसकी अपेक्षा करता हूं।
  2. undefined method `key?' for nil:NilClass त्रुटि अक्सर पहली बार पृष्ठ तक पहुंचने के बाद होती है।

जहां तक ​​मेरा बता सकते हैं, क्या होता है

  1. मान लीजिए हम app/models/example.rb
  2. में कुछ बुरी कोड अनुरोध /examples
  3. मार्ग के लिए किया जाता है के साथ उदाहरण के लिए एक पाड़ है, है रेल का हिस्सा app/controllers/examples_controller.rb से मेल खाता है लेकिन यह पहलेapp/models/example.rb लोड करता है। मुझे नहीं पता कि यह मॉडल क्यों लोड करता है, लेकिन प्रभाव यह है कि, मैं अनुमान लगाता हूं: मॉडल में त्रुटि रूटिंग कोड के एक हिस्से को रोकती है, जिससे मार्गों के कैश के निर्माण में भ्रष्टाचार होता है।
  4. इस बिंदु पर, यदि मैं भाग्यशाली हूं तो ब्राउज़र में मुझे त्रुटि की सूचना दी जाएगी। कभी-कभी, मुझे बस एक संदेश मिलता है जो No route matches [GET] "/examples" (रेल के लिए उचित होने के लिए, यह अतिरिक्त जटिलता मार्ग बनाने के लिए resources :examples का उपयोग न करने की गलती प्रतीत होती है। निम्नलिखित परवाह किए बिना)।
  5. एक दूसरा अनुरोध /examples
  6. के लिए किया जाता है अनुमान: इस बार रेल मार्ग कोड app/controllers/examples_controller.rb करने के लिए अपने कैश की गई संदर्भ का उपयोग करने की कोशिश करता है लेकिन मार्गों कैश दूषित है (एक चर nil है), क्योंकि कोड है कि सेट का चलना समाप्त कभी नहीं।

यह अंतिम आइटम सबसे अधिक परेशान है क्योंकि जिस समस्या ने इसे (मॉडल में खराब कोड) भी चलाया है, वह भी नहीं चल रहा है।

7

सुनिश्चित नहीं है कि यह एक ही बग है, लेकिन मुझे एक समान समस्या थी। एक बग्गी मॉडल के पहले लोड पर, रेलराउटिंग त्रुटि के साथ प्रतिक्रिया करता है और फिर बाद में आने वाले अनुरोधों के लिए यह undefined method 'key?' for nil:NilClass और उसी स्टैक ट्रेस के साथ प्रतिक्रिया देता है।

यह रेल क्लास कैशिंग के साथ एक बग प्रतीत होता है, लेकिन क्लास कैशिंग को सक्षम करने या चेंज क्लास रीलोडिंग को अक्षम करने में सक्षम हो सकता है।

config.cache_classes = true 

या

config.cache_classes = false 
config.reload_classes_only_on_change = false 
संबंधित मुद्दे