3

我刚刚运行迁移以添加:new_column:my_table. 这是一个序列化列(整个项目中的第一个),因此我已将配置添加到模型中:

serialize :new_column, Array

我的迁移如下:

add_column :my_table, :new_column, :text

之后,我运行了rake db:reset,以便播种新数据,并签入rails console以确保数据已正确添加到我的:new_column. 这一切都在那里。

到目前为止一切顺利,但是......在里面rails server,我的应用程序将简单地停止并出现错误:

ActiveModel::MissingAttributeError in TestController#index
missing attribute: new_column

好吧,我所知道的是我的控制器正在尝试访问@my_table_model.new_column. 我也检查过schema.db,那里一切都很好。

可能是什么原因造成的?

4

2 回答 2

4

解决了!这是一个Rails.cache问题。

确实正在填充数据库,但是缓存了先前模式中的某些属性,并且当控制器尝试访问时,正在返回先前的对象(没有:new_column_field. 所以最终的解决方案非常简单:

  Rails.cache.clear

感谢WhitSunxperous帮助我。:)

于 2013-05-09T14:06:03.930 回答
0

还要确保您没有使用数据库模式缓存转储“功能”。

例如,对于许多 pod/servers/unicorns/workers/threads 访问同一个数据库的非常大的部署,使用以下命令创建模式转储可能很有用:

RAILS_ENV=$RAILS_ENV bundle exec rake db:schema:cache:dump

这有助于减少部署期间对数据库的访问,从而提高性能。

但是,您必须确保在所有迁移完成后启动新的 Pod/服务器,如果没有,则该模式缓存包含对数据库的旧引用。

更多细节在这里:https ://kirshatrov.com/2016/12/13/schema-cache/

于 2020-01-24T13:48:06.560 回答