Я столкнулся со следующей проблемой при тестировании моего приложения 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
Что касается среды, у меня есть следующие настройки:
- Убунту 12.04 ЛТС
- Рубин 1.8.7-p371
- Рельсы 2.3.18
- Тонкий сервер 1.5.0
- АктивРекорд 2.3.18
- EventMachine 1.0.0
Кто-нибудь знает, что может быть причиной этой ошибки? Как это исправить?
Заранее спасибо!