2017-02-16(木) [長年日記]
■ mongo_mapperからmongoidへ乗り換え中
自作のちょっとしたWebアプリはHerokuで動かすのが前提なので、ストレージにはMongoLabが提供しているMongoDBのプラグインを使うことがほとんどなのだけど、初期のころはドライバにmongo_mapper gemを使っていた。ものは悪くないんだけど、最新のRubyやMongoDBへの対応が遅いというか、最近は作者の反応も鈍くなってしまって、どうもやる気がなさそう。
最近作ったものはmongoid gemの方を使っていてそっちは最新の環境への追従も早いので、mongo_mapperを使っているアプリもmongoidへ乗り換えることにした。両者の違いはけっこうあるんだけど、置き換え自体はほぼ一対一なのであんまり悩むことはない感じ。modelのテストがちゃんとあれば、ほぼ確実に移行できる。
問題は、mongo_mapperを動かすためにActiveModelを古いバージョンに固定したりしていた制約をとっぱらったら、そのせいで古いままだった他のgemもいっせいにアップデートされてしまい、その非互換に泣くはめに。やっぱそうだよねー。依存するgemの見極めは難しいなぁ。
ちなみに一番悩んだのはRailsAssetsとSprocketsのコンボ技で*1、いままでこれで動いていたのに:
RailsAssets.load_paths.each do |path| settings.sprockets.append_path(path) end
以下の一行を足してやらないといけなかった:
set :assets_paths, %w(assets/js assets/css)
ようするに、これまでデフォルトで再帰的に探してくれていたassets配下が外れたということらしい。Railsの慣習の変遷かなんかに合わせたんだろう(たぶん)。これもいずれはnpm+webpackに移行しなくてはなぁ。
*1 設計が古いアプリなので、もちろんnpm+webpackには移行していない。