Rails 中 "unknown OID" 错误的来源是什么?
What is the source of "unknown OID" errors in Rails?
将应用程序复制到生产环境时,我的 POSTGIS table 列开始出现异常,Rails 通知我有一个 "unknown 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 中,将数据库中的 postgres:// 换成 postgis:// url。如果您使用的是 Heroku,这可能需要一些丑陋的操作:
production:
url: <%= ENV.fetch('DATABASE_URL', '').sub(/^postgres/, "postgis") %>
太傻了...
不要忘记将 activerecord-postgis-adapter
添加到您的 Gemfile,这样 @Sprachprofi 的解决方案就可以 运行。
将应用程序复制到生产环境时,我的 POSTGIS table 列开始出现异常,Rails 通知我有一个 "unknown 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 中,将数据库中的 postgres:// 换成 postgis:// url。如果您使用的是 Heroku,这可能需要一些丑陋的操作:
production:
url: <%= ENV.fetch('DATABASE_URL', '').sub(/^postgres/, "postgis") %>
太傻了...
不要忘记将 activerecord-postgis-adapter
添加到您的 Gemfile,这样 @Sprachprofi 的解决方案就可以 运行。