2

我有一个使用RGeo gem 的 rails 应用程序,我很难安装 gem 并支持我的应用程序正常工作所需的底层GEOS 库。

通常,您可以从 rails 控制台运行,如果支持 GEOS RGeo::Geos.supported?,它将返回,否则。这适用于我的开发机器(OS X),但总是返回truefalsefalse我的 Dokku 容器。

我正在使用构建包来拉入这些库,这是我的内容.buildpack file

https://github.com/cyberdelia/heroku-geo-buildpack.git#1.3
https://github.com/heroku/heroku-buildpack-ruby.git#v141

这似乎至少部分有效,因为 gem 正在使用 PROJ.4 库。这可以通过在我的 Dokku 部署RGeo::CoordSys::Proj4.supported?中返回的 rails 控制台运行来检查。true

当我部署应用程序时,构建包似乎可以正常工作:

-----> Cleaning up...
-----> Building demoapp from herokuish...
-----> Adding BUILD_ENV to build environment...
-----> Multipack app detected
=====> Downloading Buildpack: https://github.com/cyberdelia/heroku-geo-buildpack.git
=====> Detected Framework: geos/gdal/proj
   Using geos version: 3.4.2
   Using gdal version: 1.11.1
   Using proj version: 4.8.0_1
-----> Vendoring geo libraries done
=====> Downloading Buildpack: https://github.com/heroku/heroku-buildpack-ruby.git
=====> Detected Framework: Ruby
-----> Compiling Ruby/Rails
-----> Using Ruby version: ruby-2.2.3
-----> Installing dependencies using bundler 1.9.7
   Running: bundle install --without development:test --path vendor/bundle --binstubs vendor/bundle/bin -j4 --deployment

我正在使用最新版本的 Dokku (0.4.10),该应用程序目前在 Ruby 2.2.3、Rails 4.2.5 上运行。

编辑(澄清):我需要这个方法调用(RGeo::Geos.supported?)在我的应用程序容器的rails控制台中返回true。只有这样我的应用程序才能正常工作,目前它正在控制台中返回,这意味着 GEOS 可通过 RGeo gem 使用,并且读取 shapefile 等功能将起作用。false,这意味着 RGeo gem 在安装过程中没有找到 GEOS (libgeos) 库。部署期间没有错误,并且日志输出(包括上面的相关部分)报告 GEOS 3.4.2 是通过 buildpack 安装的。如果没有 GEOS 支持,我什至无法为我的数据库播种,因为该过程的一部分涉及读取 shapfiles 并通过 PostGIS 将它们存储为几何图形。我的应用程序还使用了许多其他需要通过 RGeo 进行 GEOS 的功能,因此这是一个RGeo::Geos.supported?返回的要求true

4

1 回答 1

0

正如 Jose 在评论中指出的那样,您可以在部署期间使用apt-get 插件将软件包安装到您的容器中。这使您可以完全绕过geo buildpack的当前问题。

将插件安装到我的 Dokku 实例后,我在apt-packages项目的根目录中创建了一个文件,其中包含以下内容:

libgeos-dev
libgeos++-dev
libgdal-dev
libproj-dev

我从我的文件中删除了 geo buildpack ( https://github.com/cyberdelia/heroku-geo-buildpack.git#1.3),.buildpacks因为它不再被使用。现在可以完全摆脱 .buildpacks 文件,只需创建一个指向 ruby​​ buildpack存储库的BUILDPACK_URL环境变量。dokku config:set

部署后,RGeo gem 现在报告 GEOS 可用,因为它现在能够在安装期间构建本机扩展:

irb(main):001:0> RGeo::Geos.supported?
=> true

PROJ.4 仍然可以正常工作,因为我在apt-packages文件中包含了库:

irb(main):002:0> RGeo::CoordSys::Proj4.supported?
=> true
于 2016-01-13T15:46:05.830 回答