Hi everyone,
We are using DataMapper in our application. A few days ago the following
started happening: when we do a save or update on a DataMapper Resource,
we'll get the following:
undefined method `eager_load' for
#<DataMapper::Validations::ContextualValidators:0x69037c66>
I have tried to reproduce it with irb with no success. This is happening
way inside of a participant we're loading with ruote, using DataMapper
1.2.0. It seems to happen randomly, i.e., on a run it might happen on one
resource, on another run it might happen on a different one.
This is the definition of one of the offending Resources:
class Slot
include DataMapper::Resource
property :id, Serial
property :station, Integer
property :slotnumber, Integer
property :firmwareversion, String, :length=>255
property :hardwareversion, String, :length=>255
property :mechanicalversion, String, :length=>255
property :chargertype, String, :length=>255
property :statusledred, Boolean
property :statusledgreen, Boolean
property :statuscharging, Boolean
property :statusopen, Boolean
property :statusclosed, Boolean
property :statusoccupied, Boolean
property :lastalarm, String, :length=>4096
property :lastalarmtimestamp, DateTime
property :status, String, :length=>255
property :comments, Text
property :blocked, Boolean
end
Here is the backtrace:
["/Users/mario/projects/Gyokuro/Workflow/lib/gems/jruby/1.8/gems/dm-validations-1.2.0/lib/dm-validations/contextual_validators.rb:215:in
`load_validated_prop
erties'"
"/Users/mario/projects/Gyokuro/Workflow/lib/gems/jruby/1.8/gems/dm-validations-1.2.0/lib/dm-validations/contextual_validators.rb:199:in
`execute'"
"/Users/mario/projects/Gyokuro/Workflow/lib/gems/jruby/1.8/gems/dm-validations-1.2.0/lib/dm-validations.rb:86:in
`valid?'"
"/Users/mario/projects/Gyokuro/Workflow/lib/gems/jruby/1.8/gems/dm-validations-1.2.0/lib/dm-validations.rb:51:in
`save_self'"
"/Users/mario/projects/Gyokuro/Workflow/lib/gems/jruby/1.8/gems/dm-core-1.2.0/lib/dm-core/resource.rb:1006:in
`_save'"
"/Users/mario/projects/Gyokuro/Workflow/lib/gems/jruby/1.8/gems/dm-core-1.2.0/lib/dm-core/resource.rb:1222:in
`run_once'"
"/Users/mario/projects/Gyokuro/Workflow/lib/gems/jruby/1.8/gems/dm-core-1.2.0/lib/dm-core/resource.rb:1220:in
`run_once'"
"/Users/mario/projects/Gyokuro/Workflow/lib/gems/jruby/1.8/gems/dm-core-1.2.0/lib/dm-core/resource.rb:1005:in
`_save'"
"/Users/mario/projects/Gyokuro/Workflow/lib/gems/jruby/1.8/gems/dm-core-1.2.0/lib/dm-core/resource.rb:405:in
`save'"
"/Users/mario/projects/Gyokuro/Workflow/lib/gems/jruby/1.8/gems/dm-validations-1.2.0/lib/dm-validations.rb:40:in
`save'"
"/Users/mario/projects/Gyokuro/Workflow/lib/gems/jruby/1.8/gems/dm-validations-1.2.0/lib/dm-validations/context.rb:16:in
`in_context'"
"/Users/mario/projects/Gyokuro/Workflow/lib/gems/jruby/1.8/gems/dm-validations-1.2.0/lib/dm-validations.rb:40:in
`save'"
"/Users/mario/projects/Gyokuro/Workflow/lib/gems/jruby/1.8/gems/dm-core-1.2.0/lib/dm-core/resource.rb:379:in
`update'"
"/Users/mario/projects/Gyokuro/Workflow/lib/gems/jruby/1.8/gems/dm-validations-1.2.0/lib/dm-validations.rb:46:in
`update'"
"/Users/mario/projects/Gyokuro/Workflow/lib/gems/jruby/1.8/gems/dm-validations-1.2.0/lib/dm-validations/context.rb:16:in
`in_context'"
"/Users/mario/projects/Gyokuro/Workflow/lib/gems/jruby/1.8/gems/dm-validations-1.2.0/lib/dm-validations.rb:46:in
`update'"
"/Users/mario/Desktop/abstra.cc/projects/Gyokuro/Workflow/participants/update_model.rb:22:in
`consume'"
"org/jruby/RubyArray.java:1615:in `each'"
"/Users/mario/Desktop/abstra.cc/projects/Gyokuro/Workflow/participants/update_model.rb:15:in
`consume'"
"/Users/mario/projects/Gyokuro/Workflow/lib/gems/jruby/1.8/gems/dm-transactions-1.2.0/lib/dm-transactions.rb:373:in
`transaction'"
"/Users/mario/projects/Gyokuro/Workflow/lib/gems/jruby/1.8/gems/dm-transactions-1.2.0/lib/dm-transactions.rb:131:in
`commit'"
"/Users/mario/projects/Gyokuro/Workflow/lib/gems/jruby/1.8/gems/dm-transactions-1.2.0/lib/dm-transactions.rb:195:in
`within'"
"/Users/mario/projects/Gyokuro/Workflow/lib/gems/jruby/1.8/gems/dm-transactions-1.2.0/lib/dm-transactions.rb:131:in
`commit'"
"/Users/mario/projects/Gyokuro/Workflow/lib/gems/jruby/1.8/gems/dm-transactions-1.2.0/lib/dm-transactions.rb:373:in
`transaction'"
"/Users/mario/Desktop/abstra.cc/projects/Gyokuro/Workflow/participants/update_model.rb:12:in
`consume'" "org/jruby/RubyKernel.java:2080:in `send'"
"/Users/mario/Desktop/abstra.cc/projects/Gyokuro/Workflow/ruote-components/ruote/lib/ruote/svc/dispatch_pool.rb:202:in
`participant_send'" "org/jruby/RubyArray.java:1615:in `each'"
"/Users/mario/Desktop/abstra.cc/projects/Gyokuro/Workflow/ruote-components/ruote/lib/ruote/svc/dispatch_pool.rb:193:in
`participant_send'"
"/Users/mario/Desktop/abstra.cc/projects/Gyokuro/Workflow/ruote-components/ruote/lib/ruote/svc/dispatch_pool.rb:74:in
`do_dispatch'"
"/Users/mario/Desktop/abstra.cc/projects/Gyokuro/Workflow/ruote-components/ruote/lib/ruote/svc/dispatch_pool.rb:102:in
`do_threaded_dispatch'" "org/jruby/RubyProc.java:270:in `call'"
"org/jruby/RubyProc.java:224:in `call'"]
The only DataMapper require is a single require 'data_mapper', we aren't
requiring dm-validations (or even mentioning it in the Gemfile). The
offending line in contextual_validators.rb is:
resource.__send__(:eager_load, properties_to_load)
I went in and added some logging for the resource and
properties_to_loadvariables:
resource: #<Slot @id=8 @station=1 @slotnumber=1 @firmwareversion=""
@hardwareversion="" @mechanicalversion="" @chargertype="TEST"
@statusledred=nil @statusledgreen=nil @statuscharging=false
@statusopen=false @statusclosed=false @statusoccupied=false @lastalarm=""
@lastalarmtimestamp=nil @status="FREE" @comments=<not loaded>
@blocked=false>
properties_to_load:[#<DataMapper::Property::Text @model=Slot
@name=:comments>, #<DataMapper::Property::Text @model=Slot @name=:comments>]
Any ideas? Thanks!
--
You received this message because you are subscribed to the Google Groups
"DataMapper" group.
To view this discussion on the web visit
https://groups.google.com/d/msg/datamapper/-/EsDKcM9KRZcJ.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/datamapper?hl=en.