トップ 最新

ただのにっき

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に移行しなくてはなぁ。

Tags: ruby mongodb

*1 設計が古いアプリなので、もちろんnpm+webpackには移行していない。