1

我在测试我的 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
  • 红宝石 1.8.7-p371
  • 导轨 2.3.18
  • 瘦服务器 1.5.0
  • 活动记录 2.3.18
  • 事件机 1.0.0

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

提前致谢!

4

1 回答 1

0

似乎我所要做的就是修改我的开发配置文件。设置 config.cache_classes = true 解决了这个问题。

于 2013-06-08T02:44:07.323 回答