我只是运行迁移,将: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
,一切都很好。
可能导致什么?
答案 0 :(得分:3)
解决!这是一个Rails.cache
问题。
确实正在填充数据库,但是缓存了先前模式中的某些属性,并且当控制器尝试访问时,返回了前一个对象(一个没有:new_column_field
)。所以最终的解决方案非常简单:
Rails.cache.clear
感谢Whit和Sunxperous帮助我。 :)
答案 1 :(得分:0)
还请确保您没有使用数据库模式缓存转储“功能”。
例如,对于非常大的部署,其中许多Pod /服务器/独角兽/工人/线程正在访问同一个数据库,使用以下方法创建模式转储可能很有用:
RAILS_ENV=$RAILS_ENV bundle exec rake db:schema:cache:dump
这有助于减少部署期间对数据库的访问,从而提高性能。
但是,您必须确保在完成所有迁移之后启动新的Pod /服务器,否则,架构高速缓存将包含对数据库的旧引用。