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



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

通常,您可以从rails控制台运行RGeo::Geos.supported?,如果支持GEOS,它将返回true,否则返回false。这在我的devel机器(OSX)上有效,但在我的Dokku容器上总是返回false

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

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

这似乎至少部分起作用,因为gem正在获取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)库。部署过程中没有任何错误,日志输出(包括上面的相关部分)报告GEOS 3.4.2是通过构建包安装的。如果没有GEOS的支持,我甚至无法为我的数据库播种,因为这个过程的一部分涉及读取shapfiles并通过PostGIS将其存储为几何图形。我的应用程序还使用了许多其他功能,这些功能需要通过RGeo进行GEOS,因此要求RGeo::Geos.supported?在控制台中返回true,这意味着GEOS可以通过RGeo gem使用,读取形状文件等功能也可以使用。

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

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

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

我从.buildpacks文件中删除了地理构建包(https://github.com/cyberdelia/heroku-geo-buildpack.git#1.3),因为它不再被使用。现在可以完全去掉.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

相关内容

  • 没有找到相关文章

最新更新