ActiveRecord :: ConnectionAdapters :: PostgreSQL的未定义方法`geometry'

时间:2016-05-24 19:04:41

标签: ruby-on-rails postgresql heroku postgis

我使用postgres数据库创建了一个rails应用程序。我正在使用postgis扩展来进行地理查询。该应用程序在我的开发(本地)计算机上成功运行,但在我运行heroku run rake db:migrate后在heroku服务器上部署我的代码时,它会抛出错误,说undefined method geometry for ActiveRecord ConnectionAdapters PostgreSQL。 我在一些迁移中有几何数据类型用于存储纬度和经度。

请注意,我还在heroku上创建了 PostGIS extension 。并且不包含几何数据类型的迁移已成功执行。 我的文件是:

Gemfile

ruby "2.3.0"
gem 'rails', '>= 5.0.0.beta3', '< 5.1'
gem 'pg', '~> 0.18'
gem 'rgeo'
gem 'rgeo-activerecord', "~> 5.0.0.beta"
gem "activerecord-postgis-adapter", "~> 4.0.0.beta2"

psql --version是:heroku服务器上的9.5.2

psql --version是:本地服务器上的9.4.7

的database.yml

default: &default
  adapter: postgis
  encoding: unicode
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

development:
  <<: *default
  database: ad_development

production:
  <<: *default
  database: ad_production
  username: ad
  password: <%= ENV['DATABASE_PASSWORD'] %>

create_cities迁移

def change
    create_table :cities do |t|
      t.string :name
      t.references :state, foreign_key: true
      t.geometry :lat_lan
end

heroku run rake db:migrate 仅在此处停止。

我是否完全混淆了我是否使用了不合适的宝石,或者我的配置错误。请帮忙!

3 个答案:

答案 0 :(得分:2)

如果使用DATABASE_URL环境变量来设置数据库连接字符串,请确保它具有 postgis:// (而不是postgres://)前缀。

即。 postgis://username:password@db_server_url:5432/dbname

答案 1 :(得分:1)

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

编辑: 它将网址方案postgres://somewhere.com替换为postgis://somewhere.com。 它更改为GIS&#34;协议&#34;,例如将http更改为https

答案 2 :(得分:0)

您必须在df.head() 0 1 2 3 time 0 1 1 1 1130165891 59559371 1 2 1 1 1158784502 88177982 2 2 1 1 1158838664 88232144 3 2 1 1 1158838931 88232411 4 2 1 1 1158839132 88232612 文件中将postgresql替换为postgis以获取适配器选项。

E.g。

database.yml