Ruby on rails 我不开枪……有时

Ruby on rails 我不开枪……有时,ruby-on-rails,activerecord,amazon-s3,passenger,observer-pattern,Ruby On Rails,Activerecord,Amazon S3,Passenger,Observer Pattern,我有一个Rails照片观察者模型,它在照片被删除后运行。如果相册中没有其他照片,则相册将取消发布。这在大多数情况下都有效,但偶尔不会触发,导致已发布的相册中没有照片。我试图复制这个问题,但没有效果。我的观察方法如下: def after_destroy(photo) album_photos = photo.photo_album.photos.published if album_photos.count > 0 ... else photo.photo_al

我有一个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,我的照片存储在AmazonS3上。你知道如何继续调试这个吗

尝试在销毁回调后设置调试器或一些打印语句。也许它有一些奇怪的时间问题。当调用时,计数还不是0,你永远不知道


我建议你潜入并仔细检查执行的每件事,有时看起来每件事都是有序的(合乎逻辑的),除非你检查它。

在我的生产应用程序中,我也注意到观察员有时不会开火。我无法复制它。好吧,有时它也发生在开发中,但我通常肯定这是因为奇怪的重新加载或延迟加载问题

Rails 3,对吗? 您在application.rb中设置了它吗? config.active_record.observer=[:my_observer]

我正在尝试在我的应用程序控制器的顶部设置“我的观察者”,看看它是否有帮助