headAD

2018/06/24

Raspberry Pi2 Node.jsからMongoDBへアクセスできなくなった

51AmnWwg0PL._SL160_openlogo-100


Raspberry Pi2 のOSを Debian jessie から stretch へアップデートしたところ、 jessie の環境で Node, MongoDB が動いていたが、アップデートしてから Node からMongo へアクセスするとエラーを吐いてきました。


MongoDB のバージョンが古い。 2.6以上が必要と!!!!

たしかに、こちらの環境は、Nodeのバージョンは 5.6、 MongoDBは 2.4.10

Mongoの方は、Raspberry pi で公式に入手できるのはこのバージョンしかない(古すぎるけど)

最初は、MongoDB のバージョンを上げることを考え、ネット上を徘徊したがメジャーバージョンアップだとデータの持ち方も変わるなど、リスクが伴いそうな気がします。

Node, MogoDB それぞれ単独では動作するので、Node の MongoDB ドライバーに問題がありそうだということが解ってきました。

ここまで、半日かかった~~。

そこで、Nodeのドライバーを管理している npm のパッケージインストール状況を確認してみると。
(これより以下を一部加筆修正しました。2019-06-22)


$npm list
mongoose@5.1.6   <-- ここ


mogoose のバージョンが stretch のアップデートに引っ張られて 5.1.6 が入っているのが原因のようです。

MongoDB Server Version Compatibility では

  • MongoDB Server 2.4.x: mongoose ^3.8 or 4.x
  • MongoDB Server 2.6.x: mongoose ^3.8.8 or 4.x
  • MongoDB Server 3.0.x: mongoose ^3.8.22, 4.x, or 5.x
  • MongoDB2.4 では、mongoose は 4.x でした。



    ここまでくれば、ドライバーバージョンを下げてやればいい。

    package.json ファイルの mongoose を元に戻し、頭に^キャロットを付けメジャーバージョンが一致するものに固定します。

    "dependencies": {
      "mongoose": "^4.4.17",

    再度、 $npm install として npm を更新してみると。
    $npm install
    mongoose@4.13.41

    これで、Node がエラーを吐かなくなりました。

    本来は、MongoDB のバージョンを 3 に上げたいが、色々と制約がありそうなので、今後の課題とします。


    .end

    0 件のコメント: