我有一个使用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等功能。会工作的。
答案 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