Наблюдатели Rails иногда не стреляют

У меня есть модель фотообозревателя Rails, которая запускается после удаления фотографии. Если в альбоме больше нет фотографий, альбом не публикуется. Это работает в большинстве случаев, но иногда не срабатывает, оставляя опубликованный альбом без фотографий. Пробовал воспроизвести проблему, но безрезультатно. Мой метод наблюдателя выглядит следующим образом:

def after_destroy(photo)
  album_photos = photo.photo_album.photos.published
  if album_photos.count > 0
    ...
  else
    photo.photo_album.update_attribute(:published, false)
  end
  expire_cache_for(photo)
end

К сведению: наблюдатель обновления/сохранения фотоальбома срабатывает только при изменении его опубликованного статуса на true, поэтому там ничего не происходит. Я много раз пытался повторить это, но все безрезультатно. Ошибок 500 относительно этого удаления тоже нет. Обратите внимание, что я использую Passenger и мои фотографии хранятся на Amazon S3. Любая идея о том, как продолжить отладку этого?


person modulaaron    schedule 23.05.2011    source источник


Ответы (2)


Попробуйте настроить отладчик или несколько операторов печати в обратном вызове after_destroy. Может быть, у него есть какая-то странная проблема с синхронизацией, когда .count еще не равен 0, когда это вызывается, вы никогда не знаете.

Я предлагаю вам погрузиться и перепроверить все, что выполняется, иногда кажется, что все в порядке (и логично), если вы не проверите это.

person Bitterzoet    schedule 23.05.2011

В моем производственном приложении я также замечаю, что наблюдатели иногда не стреляют. У меня не получилось продублировать. Ну, иногда это также происходит в процессе разработки, но я обычно уверен, что это из-за странной перезагрузки или проблем с ленивой загрузкой...

Рельсы 3, верно? Вы установили его в своем application.rb? config.active_record.observers = [:my_observer]

Я также пытаюсь использовать require_dependency 'my_observer' в верхней части моего application_controller, чтобы посмотреть, поможет ли это.

person Kevin    schedule 22.07.2011