1

我有一个空间应用程序(PostGIS + Rails + RGeo)的开始,line_string在我的一个模型上只有一个列。在我的本地机器上一切都很好,问题出在 Heroku web dynos 上,其中 Rails/activerecord 无法识别 RGeo/PostGIS line_string 类型。

每次部署后,第一次加载模型时,我都会在日志中看到以下内容:

app[web.1]: unknown OID 17059: failed to recognize type of 'line_string'. It will be treated as String.

然后,如果我向 STDOUT 添加一些日志记录,我可以看到:

mymodel.line_string.class # String
RGeo::Feature::Geometry.check_type(mymodel.line_string) # false

但是,如果我使用 rails console ( ) 运行一次性测功机,heroku run rails c production一切都很好。我看到了我期望的输出:

irb(main):001:0> mymodel.line_string.class
=> RGeo::Geographic::SphericalLineStringImpl

irb(main):002:0> RGeo::Feature::Geometry.check_type(mymodel.line_string)
=> true

在工人测功机下也可以。

什么会导致未知的 OID 错误?为什么一次性和工人测功机能够完美地使用这个专栏,而网络测功机却不行?

4

1 回答 1

3

Puma 开始时没有配置我在application.rb. 一旦我将以下内容添加到,ActiveRecord 就开始使用 PostGIS config/puma.rb

on_worker_boot do
  if defined?(ActiveRecord::Base)
    config = ActiveRecord::Base.configurations[Rails.env] ||
      Rails.application.config.database_configuration[Rails.env]
    config['adapter'] = 'postgis'
    ActiveRecord::Base.establish_connection(config)
  end
end

on_restart do
  if defined?(ActiveRecord::Base)
    config = ActiveRecord::Base.configurations[Rails.env] ||
      Rails.application.config.database_configuration[Rails.env]
    config['adapter'] = 'postgis'
    ActiveRecord::Base.establish_connection(config)
  end
end

其他测功机类型只是在使用application.rb,所以它们总是被正确配置。

于 2016-02-02T19:31:24.857 回答