Ruby on rails Rails PostGIS ActiveRecord适配器有时返回字符串,而不是RGeo::Geos::CAPIPointImpl对象

Ruby on rails Rails PostGIS ActiveRecord适配器有时返回字符串,而不是RGeo::Geos::CAPIPointImpl对象,ruby-on-rails,activerecord,postgis,Ruby On Rails,Activerecord,Postgis,我正在Rails API应用程序中使用PostGIS ActiveRecord适配器。我有一个名为events的DB表,其中一列是名为coordinates的PostGIS几何列,例如: create_table 'events' do |t| t.geometry 'coordinates; end 当用户查询我的API时,我使用Netflix的Fast JSON API来序列化我的响应: class EventSerializer include FastJsonapi::Obje

我正在Rails API应用程序中使用
PostGIS ActiveRecord适配器。我有一个名为
events
的DB表,其中一列是名为
coordinates
的PostGIS几何列,例如:

create_table 'events' do |t|
  t.geometry 'coordinates;
end
当用户查询我的API时,我使用Netflix的Fast JSON API来序列化我的响应:

class EventSerializer
  include FastJsonapi::ObjectSerializer

    attribute :coordinates do |object|
      # coincidentally my column name and PostGIS Adapters method for getting the coordinates is the same 
      object.coordinates.coordinates
    end
end
现在大多数情况下,上面的方法都有效,我得到了一个有坐标的响应,但偶尔我会得到以下错误:

'undefined method coordinates for "0101000020E610000061C3D32B65965DC03657CD7344F64040" String, did you mean codepoints' 
上述情况偶尔发生,我无法重现,因为大部分时间一切正常。很好,我的意思是,我在数据库中只有5条记录,如果执行最终序列化这5条记录的相同函数,它将工作50次,但有1次它会给出上面的错误,并在后续调用中不断给出上面的错误。然后重新启动服务器,一切恢复正常

我最好的猜测是,序列化程序处理对象的速度比适配器解析RGeo对象以返回坐标的速度快,但我不确定如何解决这个问题


有人有什么解决方案吗?

您能尝试记录object.coordinates的类型并触发错误吗?我猜这是一个数据问题,返回了一些您不期望的东西。@sevensidedmarble这正是问题所在。我使用byebug停止代码的执行,并测试传递给序列化程序的每个对象。当我这样做并测试每个对象时,我不会得到任何错误,也不会在任何后续请求中得到任何错误。只有当代码在没有任何调试的情况下执行时才会发生这种情况,这让我觉得某个地方存在竞争条件。您是否尝试过使用不同的序列化程序(如jbuilder)进行测试?@sevensidedmarble还没有。我很固执,至少想找到bug的来源:)但是如果我不能找到它,那么我可能会使用不同的序列化程序来确定它是消毒器还是活动记录。唯一的问题是,因为这种情况很少发生,我可能会切换到另一个消毒器,但在一段时间内什么也不会发生,这给了我一个假阳性。是的,但确定它是否只发生在一个序列化器中,至少可以告诉你从哪里开始寻找。可能是序列化程序中的错误,而不是您的终端。。。