ActiveModel :: MissingAttributeError在部署后发生,然后在一段时间后消失

phi*_*ash 47 ruby ruby-on-rails activemodel

我有一个Rails 3.0.9应用程序,一旦部署,就会遇到一堆ActiveModel :: MissingAttributeErrors,它会突然出现500s.错误相当随机地发生,有时页面会加载,有时则不加载,但属性是数据库中的所有现有属性,应该找到.

奇怪的是,过了一会儿,错误消失了.突然,他们停止造成问题.

我已经搜索过这个解决方案,但是这个错误主要发生在某人已经完成Model.all(:select => 'column_x,column_y')并且正在调用column_z或者他们正在使用cache_money时.我不做这两件事.

有人可以帮忙吗?

ran*_*guy 127

您可能有一个查询不返回所有列(即使用:select),然后cache_money; 或者其他一些ActiveRecord插件使用after_initialize回调,该回调在创建新的ActiveRecord对象时执行(即从数据库中获取时).

在初始化回调中,某些东西试图访问或使用未包含在其中的属性:select.您希望此属性返回nil,但会抛出ActiveRecord :: MissingAttributeError.

您可以像文章建议的那样解救ActiveRecord :: MissingAttributeError,或者has_attribute?(:attribute_name)在尝试访问或修改属性之前修补要使用的插件.

  • +1这可能没有解决OP的问题,但这正是我面临的问题. (23认同)

rmt*_*uru 7

如果您在更新数据库之后直接遇到此问题而没有任何部署或服务器重新启动,那么对我有用的可能对您有用:

运行heroku restart,它应该是固定的.在dyno重新启动之前,旧数据有时会在服务器上缓存,因此再次启动它将清除所有数据并防止它导致该类错误.希望这可以帮助.