我有一个通过RGeo gem进行PostGIS集成的项目。 Rails 4,ruby 2.1。
RGeo具有标准方法contains?
,其检查点位于多边形中。一切都很好(在MacOS X上)。但是,当我将代码推送到生产服务器(Ubuntu 12.04)时,我遇到了这个错误:
ActionView::Template::Error (Method Geometry#contains? not defined.):
app/models/address.rb:28:in `block in define_courier_area'
app/models/address.rb:28:in `define_courier_area'
代码非常简单。我只需要返回所有CourierArea实例的数组,其中包含Address coords。
address.rb
class Address < ActiveRecord::Base
def define_courier_area # HAVE TO BE REFACTORED
arr = []
CourierArea.all.each { |ca| arr << ca if ca.poly.contains?(self.coords)}
arr.first if arr.first
end
end
我认为,生产环境无法访问由{RGeo gem提供的contains?
方法。我怎么解决这个问题?也许我应该插入require 'some_rgeo_file'
?
答案 0 :(得分:1)
问题已经解决。
RGeo使用一些外部库。对于几何计算(距离,面积,多边形点),此库是GEOS。当我试图调用contains?
时,RGeo正在寻找GEOS,但它没有安装。
此外,还有一个用于检查GEOS可用性的RGeo方法RGeo::Geos.supported?
。如果它将返回false
,您可能没有安装GEOS或RGeo与其连接有问题。如果它将返回true
- boya!你可以使用几何计算方法!
答案 1 :(得分:0)
看起来RGeo可能未安装在您的生产环境中。运行这个:
gem install rgeo
那应该解决它。