Saltad

Saltad

【バグログ】pm2プロセスのnodejsバージョンの遅れによるエラー

時間:2023.12.17

問題:discord ボットの開発中に、サーバーサイドでError: Cannot find module 'readline/promises'のエラーが発生しましたが、ローカルではエラーが発生しません。

解決手順

  1. readline/promisesはボットの依存関係である elephant-sdk が使用するライブラリです。この検索結果によると、おそらく nodejs のバージョンに関連している可能性があります。

サーバーサイドの nodejs のバージョンを確認しましたが、v16.19.1 でした。エラーはバージョンが低すぎることが原因かもしれません。

root@nunti-bot:~# node -v
v16.19.1

  1. nvm を使用して nodejs を v21.4.0 にアップグレードしましたが、ボットのエラーはまだ解消されていません。
  2. エラーを最小限にするために、Node.js REPL(対話型インタープリタ)で次のコードを実行しました:
    const readline = require('readline/promises');
    エラーは発生しませんでした。
  3. elephant sdk を個別にダウンロードし、npm を使用して依存関係をインストールしました(ボットと同じパッケージマネージャー)。リポジトリに付属している example.ts を実行しても正常に動作しました。
  4. ここまでで少し手詰まりです。しばらく放置していたが、寝る前に突然以前のテストでボットを再起動するのに pm2 を使用していたことに気づきました。そして、おそらく pm2 は古い nodejs のバージョンを使用している可能性があります。仮説を検証するために、 pm2 show 'app-name'を使用して確認しました。結果の中に次の行がありました:│ node.js version │ 16.19.1
  5. この検索結果に基づいて、pm2 をアップグレードし、pm2 プロセスを再起動しました:
    pm2 update
    pm2 restart app --update-env
    
    その後、pm2 showを再度使用して確認しましたが、今回は nodejs のバージョンが正常にアップグレードされていることがわかりました。ボットを再度テストしたところ、成功しました。
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。