2017-04-22 41 views
0

將應用程序複製到產品時,我的POSTGIS表列開始行爲異常,Rails通知我存在「未知的OID 26865」,並且這些字段將被視爲String。Rails中「未知OID」錯誤的來源是什麼?

而不是current_pos產生e。 G。我會得到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

我花了幾個小時嘗試各種解決方案,從甚至重新安裝服務器從頭開始,仔細檢查所有內容的版本號,安裝稍微更新版本的Ruby和稍微舊版本的POSTGIS(以匹配我的其他環境),導出數據庫並從一個乾淨的版本開始,等等。在我完成了遷移並且到達了「undefined method st_point」錯誤後,我終於能夠通過Google找到解決方案,並在Github問題中找到了解決方法,這很簡單:

在config/database.yml中, 換出postgres:// postgis://在數據庫url中。如果您使用的Heroku,這可能需要一些醜陋的操作:

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

太傻了......