Pregunta

Por alguna razón empecé a recibir este mensaje de error después de cambiar a Rails 3.2.Supongo que tiene algo que ver con acl9 plugin, que he intentado volver a instalar, pero nada cambió.

He movido el plugins para lib/plugins y añadidos de inicializador a config/inicializadores pero, de nuevo, el mismo error.

Busqué la solución en acl9 repo en Github, pero no pude encontrar nada allí.Tal vez no es acl9 después de todo.

Tengo un clip, acl9, authlogic instalado.

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'

EDITAR (SOLUCIONADO):Se tomó un tiempo para averiguar y todavía no estoy muy seguro de lo que pasó.Creo que tiene que ver con acl9 el apoyo de Rails 3.1+, Pero al final me dio la acl9 código desde github y de repente todo comenzó a trabajar.

¿Fue útil?

Solución

Soy un novato para ror y obtuve el mismo error al pasar por ROR "Guía de inicio".

Esto puede sonar tonto, pero otros podrían cometer el mismo error que yo, así que publicé lo que noté en Ror de los ojos de Newbie,

validates :name,  : presence => true

Nota ": Presencia", debe ser ": Presencia".Ahora el riel arroja un error de sintaxis

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

Pero si "actualiza" su navegador, oculta el error de sintaxis, en su lugar da

undefined method `key?' for nil:NilClass

Parece que los rieles en caché es el culpable.:)

Otros consejos

Esto puede no ser su problema, ya que suena como si ya tenía un código de trabajo para comenzar, pero para una referencia futura para otros, me encontré con el mismo error debido a un simple tipográfico dentro de mi código de modelo, como SO:

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

que debería haber sido:

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

Nota el "máximo" frente a ": máximo": esto resultó en el error exacto de NIL anterior, y se fue cuando fijé ese error.

No estoy seguro de si este es el mismo error, pero estaba teniendo un problema similar.En una primera carga de un modelo de buggy, rieles responde con un error de enrutamiento y luego para las solicitudes que vienen después, responde con undefined method 'key?' for nil:NilClass y la misma seguimiento de la pila.

Esto parece ser un error con Rails Class Class Caching , pero puede moverse al habilitar el almacenamiento en caché de clase o deshabilitar la recarga de la clase de cambio.

config.cache_classes = true

o

config.cache_classes = false
config.reload_classes_only_on_change = false

Estoy de acuerdo con bmoeskau que usted debe revisar su modelo de código en busca de errores.Para mi sorpresa, modelos, aparentemente, a veces se cargan durante el enrutamiento la fase.He descubierto:

  1. El código que causa el problema, en mi caso, es en el modelo, no en el controlador de donde me esperan.
  2. El undefined method `key?' for nil:NilClass error a menudo sólo se produce después de la primera vez que accede a la página.

Por lo que puedo contar, lo que pasa es que

  1. Supongamos que tenemos un andamio para Ejemplos, con algo de mala código en app/models/example.rb
  2. Se realiza una solicitud para /examples
  3. El enrutamiento de parte de los Carriles de los partidos que a app/controllers/examples_controller.rb pero primero cargas app/models/example.rb.Yo no sé por qué se carga el modelo, pero el efecto es, me conjetura:El error en el modelo, se detiene en una parte del código de enrutamiento, corrompiendo su construcción de una memoria caché de rutas.
  4. En este punto, si tengo la suerte de que el error será reportado de nuevo a mí en el navegador.A veces, sin embargo, simplemente me sale un mensaje diciendo No route matches [GET] "/examples" (Para ser justos para los Rieles, esta complicación añadida parece ser la culpa de la no utilización de resources :examples para hacer la ruta.El siguiente ocurre independientemente).
  5. Una segunda petición se hace para /examples
  6. Conjetura:Esta vez los Rieles del código de enrutamiento intenta utilizar su caché referencia a app/controllers/examples_controller.rb pero las rutas cache está dañado (una variable es nil) porque el código que establece nunca terminado de ejecutarse.

Este último elemento es el más molesto, porque el problema que lo causó (el código de malo en el modelo) no se ejecuta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top