activerecord-mysql2spatial-adapterはRails + MySQLで位置情報を扱う場合に使用される事があるGemです。
https://github.com/rgeo/activerecord-mysql2spatial-adapter は、ややメンテナンスされていない印象を受けます。
Rails 5.1.6にて、使用するとこんな感じ。
$ bin/rake db:migrate
rake aborted!
NoMethodError: undefined method `attribute_types_cached_by_default' for ActiveRecord::Base:Class
Did you mean? attribute_type_decorations
[Active Record 5 · Issue #19 · rgeo/activerecord-mysql2spatial-adapter]
(https://github.com/rgeo/activerecord-mysql2spatial-adapter/issues/19) を参考に https://github.com/sebastianiorga/activerecord-mysql2spatial-adapter/tree/rails-5 を使わせて頂く。
gem 'activerecord-mysql2spatial-adapter', github: 'sebastianiorga/activerecord-mysql2spatial-adapter', branch: 'rails-5'
するとこんな感じ
$ bin/rake db:migrate
rake aborted!
NameError: uninitialized constant RGeo::ActiveRecord::DEFAULT_SPATIAL_COLUMN_CONSTRUCTORS
Tasks: TOP => db:migrate
(See full trace by running task with --trace)
別のリポジトリのIssueですが https://github.com/stadia/activerecord-mysql2rgeo-adapter/issues/7 によると https://github.com/rgeo/rgeo-activerecord/commit/bc89717b48bfc64817cca75d1981706ed3c3af3d のように DEFAULT_SPATIAL_COLUMN_CONSTRUCTORS が削除されています。
とりあえず、動かすならばこのコードを補完してあげれば良さそうです。
# https://github.com/rgeo/rgeo-activerecord/commit/bc89717b48bfc64817cca75d1981706ed3c3af3d
module RGeo
module ActiveRecord
# Some default column constructors specifications for most spatial + # Return a feature type module given a string type.
# databases. Individual adapters may add to or override this list.
DEFAULT_SPATIAL_COLUMN_CONSTRUCTORS = {
geometry_collection: {}.freeze,
geometry: {}.freeze,
line_string: {}.freeze,
multi_line_string: {}.freeze,
multi_point: {}.freeze,
multi_polygon: {}.freeze,
point: {}.freeze,
polygon: {}.freeze,
spatial: { type: "geometry" }.freeze,
}.freeze
end
end
これでbin/rake db:migrate
が通るようになりました。
これは一時的な対策なので、ほかの方法を検討すべきかと考えています。