Rails中“未知OID”错误的来源是什么?

时间:2017-04-22 13:06:59

标签: ruby-on-rails activerecord adapter postgis

将应用程序复制到生产环境时,我的POSTGIS表列开始行为不端,Rails通知我有一个“未知的OID 26865”,并且字段将被视为字符串。

而不是current_pos产生e。 G。 #<RGeo::Geographic::SphericalPointImpl:0x22fabdc "POINT (13.39318248760133 52.52908798020595)">我会0101000020E6100000FFDD958664C92A403619DEE6B2434A40。它似乎没有安装或安装错误的activerecord-postgis-adapter,但我通过测试数据类型RGeo :: Feature :: Point的存在和测试分配来消除了这种可能性     current_pos = "POINT (13.39318248760133 52.52908798020595)" 到了现场 - 它没有错误地进行,但后来产生了另一个难以理解的十六进制字符串,如上所述。

另外,奇怪的是,POSTGIS在数据库中正常工作,例如为ST_DISTANCE查询提供正确的结果。因此,写入,写入解析(从点到十六进制格式),通过SQL操作和读取所有工作的非常有限的问题,只有读取时的解析没有。

当我尝试使用迁移来确保数据库列具有正确的类型时,迁移失败,提供

undefined method `st_point' for #<ActiveRecord::ConnectionAdapters::PostgreSQL::TableDefinition:0x00000005cb80b8>

2 个答案:

答案 0 :(得分:2)

我花了几个小时尝试各种解决方案,甚至从头开始重新安装服务器,仔细检查所有内容的版本号,安装稍微更新版本的Ruby和稍微旧版本的POSTGIS(以匹配我的其他环境) ),导出数据库并从干净的数据库开始,依此类推。在我完成迁移并得出“未定义的方法st_point”错误之后,我终于能够通过谷歌找到解决方案,在Github问题中找到解决方案,这很简单:

在config / database.yml中,交换postgres:// for postgis://在数据库网址。如果你正在使用Heroku,这可能需要一些丑陋的操作:

production:
  url: <%= ENV.fetch('DATABASE_URL', '').sub(/^postgres/, "postgis") %>

太傻了......

答案 1 :(得分:1)

不要忘记将activerecord-postgis-adapter添加到您的Gemfile中,以便可以运行@Sprachprofi的解决方案。