Ruby on rails 通过Rails进行PostGIS查询时出现间歇性错误(字符串插值失败?)
在部署了一些Rails应用程序之后,我遇到了一个间歇性错误 这段代码在Sidekiq(5个进程,每个进程有10个线程)中运行,它在Docker容器中运行。 我可以在任何时候让数万个这样的工作排队Ruby on rails 通过Rails进行PostGIS查询时出现间歇性错误(字符串插值失败?),ruby-on-rails,postgresql,docker,postgis,sidekiq,Ruby On Rails,Postgresql,Docker,Postgis,Sidekiq,在部署了一些Rails应用程序之后,我遇到了一个间歇性错误 这段代码在Sidekiq(5个进程,每个进程有10个线程)中运行,它在Docker容器中运行。 我可以在任何时候让数万个这样的工作排队 path = Path.find(path_id) nearby_nodes = Node.where("ST_DWITHIN(geog, ST_GeographyFromText(?), 25)", path.geog.to_s) 错误是: ActiveRecord::StatementInvali
path = Path.find(path_id)
nearby_nodes = Node.where("ST_DWITHIN(geog, ST_GeographyFromText(?), 25)", path.geog.to_s)
错误是:
ActiveRecord::StatementInvalid: PG::InternalError: ERROR: parse error - invalid geometry
HINT: "01" <-- parse error at position 2 within geometry
PG::InternalError: ERROR: parse error - invalid geometry
HINT: "01" <-- parse error at position 2 within geometry
这个错误是:
ActiveRecord::StatementInvalid (PG::InternalError: ERROR: parse error - invalid geometry)
HINT: "00" <-- parse error at position 2 within geometry
Node.where(“ST_DWITHIN(geog,ST_GeographyFromText(?),25)”,path.geog.to_s)
也成功生成相同的查询:到_s
的转换,作为某种迷信测试也有效:- activerecord postgis适配器(6.0.0)
- pg(1.2.3)
- 轨道(6.0.2.2)
- rgeo(2.1.1)
- rgeo activerecord(6.2.1)
- sidekiq(6.0.6)
- Ruby 2.6.6
- PostgreSQL 11.6
- PostGIS 2.5.2
- Docker 19.03.8,构建afacb8b7f0
- 无需将地理信息转换为字符串,然后将其作为地理信息读回
你可以直接试试
Node.where("ST_DWITHIN(geog, ?, 25)", path.geog)
也就是说,您可能确实有一些无效的几何图形我认为无效的几何图形会导致查询总是失败。不过,重新启动服务允许这些查询成功完成。我现在也很困惑,为什么我认为我需要
ST_GeographyFromText
——这个查询没有它也可以工作。
Node Load (5.1ms) SELECT "nodes".* FROM "nodes" WHERE (ST_DWITHIN(geog, ST_GeographyFromText('POINT (-72.633932 42.206081)'), 25)) LIMIT $1 [["LIMIT", 11]]
Node Load (2.3ms) SELECT "nodes".* FROM "nodes" WHERE (ST_DWITHIN(geog, ST_GeographyFromText('POINT (-72.633932 42.206081)'), 25)) LIMIT $1 [["LIMIT", 11]]
geog_string = path.geog.to_s
nearby_nodes = Node.where("ST_DWITHIN(geog, ST_GeographyFromText(?), 25)", geog_string)
Node.where("ST_DWITHIN(geog, ?, 25)", path.geog)