Heroku:Web dyno中PostGIS列的错误,但不是一次性或工作人员dynos

时间:2016-02-01 21:17:10

标签: ruby-on-rails heroku postgis rgeo

我有一个空间应用程序(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)运行一次性dyno,一切都很好。我看到了我期望的输出:

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

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

在工作人员dynos下也可以。

什么会导致未知的OID错误?为什么一次性和工人dynos能够完美地使用这个专栏而不是web dyno?

1 个答案:

答案 0 :(得分:3)

Puma开始时没有配置我在application.rb中添加的PostGIS。一旦我将以下内容添加到config/puma.rb

,ActiveRecord就开始使用PostGIS
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

其他dyno类型只使用application.rb,因此它们始终配置正确。