【问题标题】:Rails observers not firing...sometimesRails 观察者没有开火……有时
【发布时间】:2011-08-30 23:03:55
【问题描述】:

我有一个在删除照片后运行的 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 上。关于如何进行调试的任何想法?

【问题讨论】:

    标签: ruby-on-rails activerecord amazon-s3 passenger observer-pattern


    【解决方案1】:

    尝试在 after_destroy 回调中设置调试器或一些打印语句。也许它有一些奇怪的时间问题,当它被调用时 .count 还不是 0,你永远不知道。

    我建议你深入研究并仔细检查所有被执行的东西,有时除非你检查它,否则看起来一切都井然有序(并且合乎逻辑)。

    【讨论】:

      【解决方案2】:

      在我的生产应用程序中,我还注意到观察者有时不会触发。我一直无法复制它。嗯,有时它也发生在开发中,但我通常确定这是因为奇怪的重新加载或延迟加载问题......

      Rails 3,对吧? 你在你的application.rb中设置了吗? config.active_record.observers = [:my_observer]

      我也在我的 application_controller 顶部尝试 require_dependency 'my_observer' 看看它是否会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多