让RGeo GEOS支持在部署到Dokku的Rails应用程序中工作

时间:2016-01-10 16:58:29

标签: ruby ruby-on-rails-4 dokku rgeo

我有一个使用RGeo gem的rails应用程序,我很难安装gem以支持我的应用程序正常工作所需的基础GEOS library

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

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

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

这似乎至少部分有效,因为宝石正在拿起PROJ.4库。这可以通过在rails控制台中运行RGeo::CoordSys::Proj4.supported?来检查,该控制台在我的Dokku部署中返回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。只有这样我的应用程序才能正常工作,目前它正在返回false,这意味着RGeo gem在安装过程中没有找到GEOS(libgeos)库。部署期间没有错误,日志输出(上面包含的相关部分)报告通过buildpack安装了GEOS 3.4.2。如果没有GEOS支持,我甚至无法播放我的数据库,因为该过程的一部分涉及读取shapfiles并通过PostGIS将它们存储为几何。我的应用程序还使用了许多其他通过RGeo需要GEOS的功能,因此要求RGeo::Geos.supported?在控制台中返回true,这意味着GEOS可通过RGeo gem获得,并具有读取shapefile等功能。会工作的。

1 个答案:

答案 0 :(得分:0)

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

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

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

我从https://github.com/cyberdelia/heroku-geo-buildpack.git#1.3文件中删除了geo buildpack(.buildpacks),因为不再使用它。现在可以完全删除.buildpacks文件,只需创建一个指向ruby buildpack repo的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