サービスを実行したらこんなエラーが出ました。
Error: Please install sqlite3 package manuallyいや、ちゃんと
package.json
のdependencies
に入ってるし。というわけで、今日はこのお話です。
原因は?
原因を探るのにいろいろ苦労したのですが、このページにエラーメッセージで検索してたどり着いた人はとりあえず答えを教えろという気持ちでしょうから教えてあげます。ホストとコンテナでNode.jsのバージョンが違っていたのが原因です。
もう少し詳しく書くと、
- Node.jsのABIのバージョン
node_abi
が違っている状態で - sqlite3モジュールを使って
- ホスト側で
npm install
した
もうちょっと詳しく
この問題が発生したとき、ホスト側のNode.jsのバージョンは10(ABIバージョン64)でした。一方、コンテナ側のバージョンは8(ABIバージョン57)でした。
さて、この状態でホスト側で
npm install
すると、以下のようなモジュールが作成されます。node_modules/sqlite3/lib/binding/node-v64-linux-x64/node_sqlite3.nodeしかし実際に実行する側(コンテナ側)では、ABIバージョン57に対応したモジュールがほしいので、
node_modules/sqlite3/lib/binding/node-v57-linux-x64/node_sqlite3.nodeを一生懸命探します。
当然見つからないため、「
sqlite3
モジュールがないぞ!」と判断して最初のようなエラーを吐き出します。対策
ちゃんとホストとコンテナでNode.jsのバージョンを合わせるか、コンテナ内でnpm install
しましょう。
0 件のコメント:
コメントを投稿