当将应用程序复制到生产环境时,我的 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>
最佳答案
我花了几个小时尝试各种解决方案,甚至从头开始重新安装服务器,仔细检查所有版本号,安装稍新版本的 Ruby 和稍旧版本的 POSTGIS(以匹配我的其他环境),导出数据库并从一个干净的数据库开始,等等。在我完成迁移并遇到“undefined method st_point”错误之后,我终于能够通过 Google 找到解决方案,在 Github 问题中找到解决方案,这非常简单:
在 config/database.yml 中,将数据库 url 中的 postgres://换成 postgis://。如果您使用的是 Heroku,这可能需要一些丑陋的操作:
production:
url: <%= ENV.fetch('DATABASE_URL', '').sub(/^postgres/, "postgis") %>
太傻了...
关于ruby-on-rails - Rails 中 "unknown OID"错误的来源是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43559593/