Рельсы наблюдатели не стреляют ... иногда - PullRequest
1 голос
/ 23 мая 2011

У меня есть модель обозревателя фотографий 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

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

Ответы [ 2 ]

0 голосов
/ 22 июля 2011

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

Rails 3, верно? У вас есть это установлено в вашем application.rb? config.active_record.observers = [: my_observer]

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

0 голосов
/ 23 мая 2011

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

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

...