mongoid / origin

A Ruby DSL for building MongoDB queries
http://mongoid.org/en/origin/index.html
MIT License
62 stars 29 forks source link

`NoMethodError: undefined method `[]' for nil:NilClass` on Origin::Selectable#where #89

Open fancyremarker opened 10 years ago

fancyremarker commented 10 years ago

This exception has been appearing for us frequently, but not deterministically. I'm having a very hard time pinpointing what's going wrong, but am happy to debug further if you have any hints or intuition about what might be causing the bug.

The full backtrace is as follows. This is on Origin 1.1.0, Mongoid 3.1.4 and Ruby 1.9.3-p448.

#<NoMethodError: undefined method `[]' for nil:NilClass>
$HOME/.rvm/gems/ruby-1.9.3-p448@rails-heat/gems/origin-1.1.0/lib/origin/smash.rb:81:in `storage_pair'
$HOME/.rvm/gems/ruby-1.9.3-p448@rails-heat/gems/origin-1.1.0/lib/origin/selector.rb:43:in `store'
$HOME/.rvm/gems/ruby-1.9.3-p448@rails-heat/gems/origin-1.1.0/lib/origin/smash.rb:22:in `block (2 levels) in __deep_copy__'
$HOME/.rvm/gems/ruby-1.9.3-p448@rails-heat/gems/origin-1.1.0/lib/origin/smash.rb:21:in `each_pair'
$HOME/.rvm/gems/ruby-1.9.3-p448@rails-heat/gems/origin-1.1.0/lib/origin/smash.rb:21:in `block in __deep_copy__'
$HOME/.rvm/gems/ruby-1.9.3-p448@rails-heat/gems/origin-1.1.0/lib/origin/smash.rb:42:in `initialize'
$HOME/.rvm/gems/ruby-1.9.3-p448@rails-heat/gems/origin-1.1.0/lib/origin/smash.rb:20:in `new'
$HOME/.rvm/gems/ruby-1.9.3-p448@rails-heat/gems/origin-1.1.0/lib/origin/smash.rb:20:in `__deep_copy__'
$HOME/.rvm/gems/ruby-1.9.3-p448@rails-heat/gems/origin-1.1.0/lib/origin/queryable.rb:74:in `initialize_copy'
$HOME/.rvm/gems/ruby-1.9.3-p448@rails-heat/gems/mongoid-3.1.4/lib/mongoid/criteria.rb:489:in `initialize_copy'
$HOME/.rvm/gems/ruby-1.9.3-p448@rails-heat/gems/origin-1.1.0/lib/origin/selectable.rb:603:in `initialize_clone'
$HOME/.rvm/gems/ruby-1.9.3-p448@rails-heat/gems/origin-1.1.0/lib/origin/selectable.rb:603:in `clone'
$HOME/.rvm/gems/ruby-1.9.3-p448@rails-heat/gems/origin-1.1.0/lib/origin/selectable.rb:603:in `selection'
$HOME/.rvm/gems/ruby-1.9.3-p448@rails-heat/gems/origin-1.1.0/lib/origin/selectable.rb:545:in `expr_query'
$HOME/.rvm/gems/ruby-1.9.3-p448@rails-heat/gems/origin-1.1.0/lib/origin/selectable.rb:451:in `where'
$HOME/.rvm/gems/ruby-1.9.3-p448@rails-heat/gems/mongoid-3.1.4/lib/mongoid/criteria.rb:390:in `where'
$HOME/.rvm/gems/ruby-1.9.3-p448@rails-heat/gems/mongoid-3.1.4/lib/mongoid/criterion/findable.rb:125:in `from_database'
$HOME/.rvm/gems/ruby-1.9.3-p448@rails-heat/gems/mongoid-3.1.4/lib/mongoid/criterion/findable.rb:93:in `multiple_from_map_or_db'
$HOME/.rvm/gems/ruby-1.9.3-p448@rails-heat/gems/mongoid-3.1.4/lib/mongoid/criterion/findable.rb:19:in `execute_or_raise'
$HOME/.rvm/gems/ruby-1.9.3-p448@rails-heat/gems/mongoid-3.1.4/lib/mongoid/criterion/findable.rb:40:in `find'
$HOME/.rvm/gems/ruby-1.9.3-p448@rails-heat/gems/mongoid-3.1.4/lib/mongoid/finders.rb:85:in `find'
$HOME/webapp/app/controllers/thing_controller.rb:34:in `show'
fancyremarker commented 10 years ago

I should add that when I wrap the above Thing.find call in a begin ; rescue ; end block, I'm able to call Thing.find within the rescue and it works as expected. So I feel like there's some thread safety issue whereby @aliases is not properly set on the cloned object.