Сблъсках се със следния проблем, когато тествах приложението си Rails.
Когато правя асинхронна HTTP заявка с EventMachine, не мога да използвам обекти 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
- Релси 2.3.18
- Тънък сървър 1.5.0
- ActiveRecord 2.3.18
- EventMachine 1.0.0
Някой знае ли какво може да причинява тази грешка? Как да поправя това?
Благодаря предварително!