【问题标题】:What is the source of "unknown OID" errors in Rails?Rails 中“未知 OID”错误的来源是什么?
【发布时间】:2017-09-19 10:52:12
【问题描述】:

将应用程序复制到生产环境时,我的 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-on-rails activerecord adapter postgis


    【解决方案1】:

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

    在 config/database.yml 中,将数据库 url 中的 postgres:// 替换为 postgis://。如果你使用 Heroku,这可能需要一些丑陋的操作:

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

    太傻了……

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2017-02-26
        • 2013-01-30
        • 1970-01-01
        • 2020-06-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多