Domanda

Per qualche motivo ho iniziato a ricevere questo errore dopo il passaggio a Rails 3.2.Immagino che abbia qualcosa a che fare con il plugin acl9, che ho provato a reinstallare, ma non è cambiato nulla.

Ho spostato i plugin su lib / plugins e aggiunto l'inizializzatore a config/initializers ma ancora una volta, lo stesso errore.

Ho cercato la soluzione su acl9 repo su Github, ma non sono riuscito a trovare nulla lì.Forse non è acl9 dopo tutto.

Ho installato paperclip, acl9, authlogic.

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'

MODIFICA (RISOLTO):Ci è voluto un po ' di tempo per capire e non sono ancora abbastanza sicuro di cosa sia successo.Penso che abbia a che fare con il supporto di acl9 per Rails 3.1+ Ma alla fine ho preso il codice acl9 da github e tutto improvvisamente ha iniziato a funzionare.

È stato utile?

Soluzione

Sono un principiante per ror e ho ottenuto lo stesso errore mentre vai attraverso ROR "Guida introduttiva".

Questo può sembrare sciocco, ma altri potrebbero fare lo stesso errore di essere, quindi postare quello che ho notato in ROR da Newbie's Eyes,

validates :name,  : presence => true
.

Nota ": presenza", dovrebbe essere ": presenza".Ora la ferrovia lancia un errore di sintassi

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

Ma se si "aggiorna" il browser, nasconde l'errore di sintassi, invece dà

undefined method `key?' for nil:NilClass
.

Sembra che la cache dei binari sia il colpevole.:)

Altri suggerimenti

Questo potrebbe non essere il tuo problema come sembra che tu abbia già avuto il codice di lavoro per cominciare, ma per riferimento futuro per gli altri, ho corso nello stesso errore a causa di un semplice errore di errore all'interno del mio codice modello, come così:

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

che avrebbe dovuto essere:

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

Nota il "massimo" VS. ": massimo" - Ciò ha comportato l'esatto errore NIL sopra, e è andato via quando ho riparato quel tipo di errore.

Non sono sicuro se questo è lo stesso bug, ma stavo avendo un problema simile.Su un primo carico di un modello buggy, Rails risponde con un errore di routing e quindi per le richieste che vengono in seguito rispondono con undefined method 'key?' for nil:NilClass e la stessa traccia dello stack.

Questo sembra essere un bug con Rails Class Class Caching , ma può spostarsi abilitando la cache di classe o la disattivazione della classe di modifica della classe.

config.cache_classes = true
.

o

config.cache_classes = false
config.reload_classes_only_on_change = false
.

Sono d'accordo con bmoeskau che dovresti controllare il codice del tuo modello per i bug.Con mia sorpresa, i modelli apparentemente a volte vengono caricati durante il routing fase.Ho scoperto:

  1. Il codice che causa il problema, nel mio caso, è nel modello, non nel controller dove me lo aspetterei.
  2. Il undefined method `key?' for nil:NilClass l'errore spesso si verifica solo dopo la prima volta che accedo alla pagina.

Per quanto posso dire, quello che succede è

  1. Supponiamo di avere uno scaffold per esempi, con un codice errato in app/models/example.rb
  2. Una richiesta è fatta per /examples
  3. La parte di routing di Rails corrisponde a app/controllers/examples_controller.rb ma è prima carico app/models/example.rb.Non capisco perché carica il modello, ma l'effetto è, congettura:L'errore nel modello si ferma breve una parte del codice di routing, corrompendo la sua costruzione di una cache di rotte.
  4. A questo punto, se sono fortunato l'errore mi verrà segnalato nel browser.A volte, tuttavia, ricevo semplicemente un messaggio che dice No route matches [GET] "/examples" (Per essere onesti con Rails, questa complicazione aggiunta sembra essere la colpa di non usare resources :examples per fare il percorso.Quanto segue accade a prescindere).
  5. Una seconda richiesta è fatta per /examples
  6. Congettura:Questa volta il codice di routing Rails tenta di utilizzare il suo riferimento memorizzato nella cache per app/controllers/examples_controller.rb ma la cache delle rotte è corrotta (una variabile è nil) perché il codice che imposta non ha mai finito di funzionare.

Quest'ultimo elemento è più fastidioso perché il problema che lo ha causato (il codice errato nel modello) non viene nemmeno eseguito.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top