2013-05-25 35 views
1

我在測試Rails應用程序時遇到了以下問題。ActiveRecord對象無法在EventMachine回調中工作

使用EventMachine進行異步HTTP請求時,出於某種原因,我無法在回調中使用ActiveRecord對象。 每當我嘗試訪問我得到下面的異常對象:如果我從回調刪除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' 

,它工作正常。不幸的是,我真的需要他們可以訪問,所以刪除不是一種選擇。

如果我訪問讀取或寫入對象,沒關係。

我寫的代碼看起來是這樣的:

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

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

至於環境,我有以下設置:

  • 的Ubuntu LTS 12.04
  • 的Ruby 1.8.7-P371
  • 導軌2.3.18
  • 瘦服務器1.5.0
  • ActiveRecord的2.3.18
  • EventMachine的1.0.0

有誰知道什麼可能導致這個錯誤?如何解決這個問題?

在此先感謝!

+0

你能告訴你如何得到'對象'? –

回答

0

看來,我所要做的就是修改我的開發配置文件。 設置config.cache_classes = true解決了問題。

+0

這很瘋狂,我必須維護一些傳統的Rails 2.3項目。 你知道我們爲什麼有這個錯誤嗎? – BlackTea

+0

不幸的不是。由於此修復程序運行良好,因此我沒有必要進一步挖掘。 – dominos

+0

是的,但在開發過程中,我們需要在每次進行更改時重新啓動服務器。或者你知道更好的方法嗎? – BlackTea

相關問題