生产失败/ heroku:WHERE a.attrelid =’“学校”’:: regclass
我在我的本地环境中添加了一个名为schools
的表格,它在开发中工作得很好。 实际上它甚至可以在staging(heroku)中正常工作,但是在生产和rake db:migrate
失败的时候rake db:migrate
抛出错误。
我甚至无法预编译assest(使用RAILS_ENV = production),访问我的应用程序的任何部分,包括生产中的rails控制台(heroku)。 一切都在抛出错误。 我已经失去了几个小时,但我觉得没有更接近我们的想法。 (注意:我对table_name的引用有'"..."'
,我认为这是问题的一部分)
我从rails 3.1.0转到3.1.3,这可能与它有关。
PGError: ERROR: relation "schools" does not exist LINE 4: WHERE a.attrelid = '"schools"'::regclass ^ : SELECT a.attname, format_type(a.atttypid, a.atttypmod), d.adsrc, a.attnotnull FROM pg_attribute a LEFT JOIN pg_attrdef d ON a.attrelid = d.adrelid AND a.attnum = d.adnum WHERE a.attrelid = '"schools"'::regclass AND a.attnum > 0 AND NOT a.attisdropped ORDER BY a.attnum
我对此感到迷茫。 我在这里阅读了关于这个主题的其他几个问题,但没有解决方案。 谢谢您的帮助。 非常感谢任何见解。
更新 ————————————————- —–
我刚刚在heroku上创建了一个全新的应用程序并运行了rake db:migrate
并得到了同样的错误。
更新2
我从heroku克隆了应用程序,“学校”在模式中。
create_table "schools", :force => true do |t| ... ... end
更新3
尝试恢复到rails 3.1.0,但这没有帮助。
更新4
仍在努力。 还没有听说过heroku支持。
更新5
Heroku支持能够检查“学校”不是数据库中的表,但我仍然无法访问控制台和应用程序。
Heroku支持帮助我解决了这个问题,尽管我们发现它并不一定是heroku的平台相关问题。
我遇到了鸡与蛋的问题,迁移不会运行,因为rails bootstrap正在尝试与表进行通信,并且由于迁移无法运行而未创建表。 当铁路启动时,ActiveAdmin正在初始化,并试图查找学校。 谢谢大家的帮助。
我通过评论解决了这个问题
#ActiveAdmin.routes(self)
在迁移前的路线中。 完成迁移后,我只是取消注释这一行,一切正常。
不,引用应该不是问题。 虽然在这种情况下不需要双引号,但它们也没有错:
SELECT '"schools"'::regclass
我认为PostgreSQL是正确的,并且关系schools
不存在 – 在您的数据库和作为search_path
一部分的模式中。
如果可以连接到数据库,则可以运行此查询来诊断问题:
SELECT n.nspname AS schema_name ,c.relname AS table_name ,c.relhastriggers ,c.reltuples FROM pg_catalog.pg_class c LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace WHERE c.relname ~~* '%schools%' AND c.relkind = 'r' AND nspname <> 'pg_catalog';
查找名称中包含字符串schools
每个表。 与psql
元命令类似:
\dt *schools*
确保您与同一用户连接到出现问题的同一数据库。
我在运行测试时遇到了这个问题。
只需为test
环境重置数据库:
rake db:reset RAILS_ENV=test