在Heroku上启用Ruby PostGIS支持

时间:2015-09-22 07:03:34

标签: ruby-on-rails heroku postgis

我试图在Heroku的Rails应用程序中启用PostGIS。我的Gemfile包含activerecord-postgis-adapter gem:

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 article,但我使用的是更新,真正的多构建包格式:

$ 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环境变量集,因为我收集旧的多buildpack方法。

2 个答案:

答案 0 :(得分:4)

PostGIS可以使用Heroku Free dyno和:
- Rails 4.2
- activerecord-postgis-adapter 3.1.4

你必须:

  1. 像这样设置你的config / database.yml:
  2. 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:
    2. $ 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. 然后在config / environments / production.rb
      2. 中添加一个小的monckey补丁
        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免费dyno上免费使用postgres为我工作。

答案 1 :(得分:0)

我错过了业余爱好层数据库不支持PostGIS的事实。