ruby-on-rails - Rails 中 "unknown OID"错误的来源是什么?

当将应用程序复制到生产环境时,我的 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/

相关文章:

domain-driven-design - ES/DDD 微服务中的报告

python - argparse:像帮助字符串一样处理版本字符串

arrays - Swagger 的对象数组

python-3.x - python3 中 f2py 的 Makefile

php - 从当前日期时间生成唯一的交易 ID

php - Laravel Eloquent : route model binding not w

perl - 在 Perl 中打印哈希值

python - 一种不必每次都在 colorama 中重置颜色/样式的方法

sql - 在 SQL Server 中将所有表数据类型从文本更改为 varchar

vim - 将行合并到 vim 中的段落