我使用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
仅在此处停止。
我是否完全混淆了我是否使用了不合适的宝石,或者我的配置错误。请帮忙!
答案 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