ActiveRecord对象在EventMachine回调中不起作用

时间:2013-05-25 23:06:07

标签: ruby-on-rails ruby activerecord eventmachine thin

在测试我的Rails应用时遇到了以下问题。

使用EventMachine发出异步HTTP请求时,由于某种原因,我无法在回调中使用ActiveRecord对象。 每当我尝试访问该对象时,我都会遇到以下异常:

/home/user/.rvm/gems/ruby-1.8.7-p371/gems/activerecord-2.3.18/lib/active_record/attribute_methods.rb:144:in `create_time_zone_conversion_attribute?': You have a nil object when you didn't expect it! (NoMethodError)
You might have expected an instance of Array.
The error occurred while evaluating nil.include?
from /home/user/.rvm/gems/ruby-1.8.7-p371/gems/activerecord-2.3.18/lib/active_record/attribute_methods.rb:75:in `define_attribute_methods'
from /home/user/.rvm/gems/ruby-1.8.7-p371/gems/activerecord-2.3.18/lib/active_record/attribute_methods.rb:71:in `each'
from /home/user/.rvm/gems/ruby-1.8.7-p371/gems/activerecord-2.3.18/lib/active_record/attribute_methods.rb:71:in `define_attribute_methods'
from /home/user/.rvm/gems/ruby-1.8.7-p371/gems/activerecord-2.3.18/lib/active_record/attribute_methods.rb:257:in `method_missing'

如果我从回调中删除ActiveRecord对象,它可以正常工作。不幸的是,我真的需要它们才能访问,因此删除不是一种选择。

如果我访问该对象进行读写,则无关紧要。

我写的代码看起来像这样:

http = EM::HttpRequest.new(url).get(:query => query)

http.callback do
  ....
  object.status = 'delivered'
  object.save!
  ....
end

至于环境,我有以下设置:

  • Ubuntu 12.04 LTS
  • Ruby 1.8.7-p371
  • Rails 2.3.18
  • 瘦服务器1.5.0
  • ActiveRecord 2.3.18
  • EventMachine 1.0.0

有谁知道可能导致此错误的原因是什么?如何解决这个问题?

提前致谢!

1 个答案:

答案 0 :(得分:0)

似乎我只需要修改我的开发配置文件。 设置config.cache_classes = true修复了问题。