Ruby on rails Heroku PG认为列是未定义的。有时

Ruby on rails Heroku PG认为列是未定义的。有时,ruby-on-rails,postgresql,heroku,Ruby On Rails,Postgresql,Heroku,我最近刚刚通过迁移在我的生产应用程序中添加了一个专栏,我一整天都在遇到我无法理解的滚动条错误 ActiveRecord::StatementInvalid: PG::UndefinedColumn: ERROR: column callable_phone_numbers.active does not exist LINE 1: ...llable_phone_numbers"."phone_number_id" AS t0_r3, "callable_... ^ : SELECT "call

我最近刚刚通过迁移在我的生产应用程序中添加了一个专栏,我一整天都在遇到我无法理解的滚动条错误

ActiveRecord::StatementInvalid: PG::UndefinedColumn: ERROR: column callable_phone_numbers.active does not exist
LINE 1: ...llable_phone_numbers"."phone_number_id" AS t0_r3, "callable_...
^
: SELECT "callable_phone_numbers".*, "callable_phone_numbers"."id" AS t0_r0, "callable_phone_numbers"."callable_id" AS t0_r1, "callable_phone_numbers"."callable_type" AS t0_r2, "callable_phone_numbers"."phone_number_id" AS t0_r3, "callable_phone_numbers"."active" AS t0_r4, "callable_phone_numbers"."created_at" AS t0_r5, "callable_phone_numbers"."updated_at" AS t0_r6, "phone_numbers"."id" AS t1_r0, "phone_numbers"."number" AS t1_r1, "phone_numbers"."created_at" AS t1_r2, "phone_numbers"."updated_at" AS t1_r3, "phone_numbers"."label" AS t1_r4, "phone_numbers"."assigned" AS t1_r5, "phone_numbers"."account_id" AS t1_r6, "phone_numbers"."sent_messages_count" AS t1_r7, "phone_numbers"."received_messages_count" AS t1_r8, "phone_numbers"."last_sent_message_at" AS t1_r9, "phone_numbers"."last_received_message_at" AS t1_r10, "phone_numbers"."carrier_name" AS t1_r11, "phone_numbers"."carrier_type" AS t1_r12, "phone_numbers"."carrier_updated_at" AS t1_r13 FROM "callable_phone_numbers" LEFT OUTER JOIN "phone_numbers" ON "phone_numbers"."id" = "callable_phone_numbers"."phone_number_id" WHERE "phone_numbers"."disconnected" = 'f' AND "callable_phone_numbers"."callable_type" = 'Student' AND "callable_phone_numbers"."callable_id" IN (1181)
如您所见,它抱怨callable_phone_numbers.active列不存在。我最近使用迁移从联接表中删除了该列,并在表phone_numbers上创建了一个类似的断开连接的列

是的,我仔细检查了我的rake db:migrate on production

唯一使用.active的地方是我的学生模型上的关联where子句

以前是

class Student.rb < ActiveRecord::Base
  has_many :active_phone_numbers, -> { where callable_phone_numbers: {active: true} }, through: :callable_phone_numbers, source: :phone_number
…但在迁移的同时,协会变成了

class Student.rb < ActiveRecord::Base
  has_many :active_phone_numbers, -> { where phone_numbers: {disconnected: false} }, through: :callable_phone_numbers, source: :phone_number
我在开发过程中根本无法重现这个错误,而且这个错误似乎在生产中随机重现,加载学生一次,应用程序错误,刷新,没有错误


有没有可能我的代码在Heroku上的dynos上被奇怪地缓存了?数据库是否保存了重复查询?我不知道还有什么奇怪的事情吗?

您可能需要运行heroku restart。我自己也遇到过同样的情况,表列由rails缓存,重新启动dynos刷新并重新加载缓存。这似乎是合理的。虽然你认为部署也会重启事情。。。