生产中未定义的方法

时间:2014-05-26 03:18:34

标签: ruby-on-rails rgeo

我有一个通过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'

2 个答案:

答案 0 :(得分:1)

问题已经解决。

RGeo使用一些外部库。对于几何计算(距离,面积,多边形点),此库是GEOS。当我试图调用contains?时,RGeo正在寻找GEOS,但它没有安装。

此外,还有一个用于检查GEOS可用性的RGeo方法RGeo::Geos.supported?。如果它将返回false,您可能没有安装GEOS或RGeo与其连接有问题。如果它将返回true - boya!你可以使用几何计算方法!

答案 1 :(得分:0)

看起来RGeo可能未安装在您的生产环境中。运行这个:

gem install rgeo

那应该解决它。