我有一个空间应用程序(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?
答案 0 :(得分:3)
Puma开始时没有配置我在application.rb
中添加的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
其他dyno类型只使用application.rb
,因此它们始终配置正确。