【问题标题】:Getting RGeo GEOS support to work in a Rails app deployed to Dokku获得 RGeo GEOS 支持以在部署到 Dokku 的 Rails 应用程序中工作
【发布时间】:2016-01-10 16:58:29
【问题描述】:

我有一个使用 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

这似乎至少部分有效,因为 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 是通过 buildpack 安装的。如果没有 GEOS 支持,我什至无法为我的数据库播种,因为该过程的一部分涉及读取 shapfiles 并通过 PostGIS 将它们存储为几何图形。我的应用程序还使用了许多其他需要通过 RGeo 进行 GEOS 的功能,因此要求 RGeo::Geos.supported? 在控制台中返回 true,这意味着 GEOS 可通过 RGeo gem 使用,并且读取 shapefile 等功能将起作用。

【问题讨论】:

  • RGeo 需要一些额外的软件包,例如 libgeos。你安装了吗?
  • 我意识到这就是手头的问题。顺便说一句,libgeos 与我的问题中提到的 GEOS 库相同。如果您再次阅读该问题,您会注意到 buildpack 确实安装了 GEOS,您还可以在部署的输出中看到:使用 geos 版本:3.4.2。所以我想弄清楚这个过程出了什么问题,或者是否有办法将geo buildpack与Dokku一起使用。
  • 只是为了提供更多背景知识:这是我第一次使用 Dokku 和扩展 Docker。我知道如何在通过系统的包管理器安装所有必需库的单个服务器上使其工作。问题是如何让它在 Dokku 中工作,每次部署时都会创建一个新的 Docker 容器。
  • 您在哪里看到错误?我在该日志输出中看不到任何错误,而且您还没有说明这是如何工作的。
  • @JoseDiaz-Gonzalez,是的,我有......见上面我声明 RGeo::Geos.supported?在控制台中返回 false。如果 gem 在安装期间能够找到 geos 库,这将返回 true。

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


【解决方案1】:

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

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

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

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

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

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

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

irb(main):002:0> RGeo::CoordSys::Proj4.supported?
=> true

【讨论】:

  • 嗨@sethdeckard,我遇到了同样的问题。我尝试了您的解决方案,但我不确定是否完全理解有关添加 dokku 配置的部分。事实上,我的审问是关于用于 BUILDPACK_URL 的 url
  • @DenisMorin 我已经将这个应用程序迁移到 k8s,只使用 Docker 容器,让您可以完全控制安装的内容。如果可能的话,如果可以的话,我会尝试走这条路,因为它会省去很多麻烦(并创建新的:))。看起来原始的“构建包”不再受支持(当时这更像是 Heroku 的事情,也得到了 Dokku 的支持)。我相信这些天即使 Heroku 也支持直接部署 Docker。
猜你喜欢
  • 1970-01-01
  • 2021-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-17
  • 1970-01-01
相关资源
最近更新 更多