Включение поддержки Ruby PostGIS в Heroku

Я пытаюсь включить PostGIS в своем приложении Rails на Heroku. мой Gemfile включает в себя activerecord-postgis-adapter перл:

gem 'activerecord-postgis-adapter', '3.0.0'

Однако после загрузки моего экземпляра я не вижу полной поддержки:

$ heroku run irb
Running `irb` attached to terminal... up, run.5549
irb(main):001:0> require 'rgeo'
=> true
irb(main):002:0> RGeo::Geos.supported?
=> false

Я добавил heroku-geo-buildpack, как указано в статье PostGIS, хотя я использую более новый формат multi-buildpack:

$ heroku buildpacks
=== staging Buildpack URLs
1. https://github.com/cyberdelia/heroku-geo-buildpack.git#1.3
2. https://github.com/heroku/heroku-buildpack-ruby.git#v140

Я запутался, так как мой процесс сборки выглядит правильно:

-----> Multipack app detected
-----> Fetching custom git buildpack... done
-----> geos/gdal/proj app detected
       Using geos version: 3.4.2
       Using gdal version: 1.11.1
       Using proj version: 4.8.0_1
-----> Vendoring geo libraries done
-----> Fetching custom git buildpack... done
-----> Ruby app detected
-----> Compiling Ruby/Rails
...

Что мне не хватает? У меня нет BUILDPACK_URL переменная окружения установлена, насколько я понимаю, это для старого подхода multi-buildpack.

2 ответа

Решение

PostGIS работает с Heroku Free dyno и:
- Рельсы 4.2
- activerecord-postgis-адаптер 3.1.4

Ты должен:

  1. установите ваш config/database.yml так:

default: &default
  adapter: postgis
  encoding: unicode
  # For details on connection pooling, see rails configuration guide
  # http://guides.rubyonrails.org/configuring.html#database-pooling
  pool: 5

development:
  <<: *default
  database: adopt_your_geek_development
  username: postgres
  host: mydb.com
  port: 9999
  postgis_extension: postgis
  schema_search_path: public,postgis

...

production:
  <<: *default
  database: appname_production
  username: appname
  password: <%= ENV['ADOPT_YOUR_GEEK_DATABASE_PASSWORD'] %>
  postgis_extension: postgis
  schema_search_path: public,postgis

  1. Добавить buildpacks:

$ heroku buildpacks:add https://github.com/ddollar/heroku-buildpack-multi.git

Со следующим файлом.buildpacks:

$ cat .buildpacks 
https://github.com/cyberdelia/heroku-geo-buildpack.git
https://github.com/heroku/heroku-buildpack-ruby.git

  1. Затем добавьте небольшой патч monckey в config/environment /production.rb

module ActiveRecord
   module ConnectionHandling
     class MergeAndResolveDefaultUrlConfig
       private
       def config
         @raw_config.dup.tap do |cfg|
           if url = ENV['DATABASE_URL']
             cfg[@env] ||= {}
             cfg[@env]["url"] ||= url.try(:gsub, "postgres", "postgis")
           end
         end
       end
     end
   end
end

Сейчас я работаю на Heroku Free Dyno с бесплатными Postgres.

Я упустил тот факт, что базы данных уровня Хобби не поддерживают PostGIS.

Другие вопросы по тегам