概要
Growiをアップデートをする中でエラーが発生したので対処した時のメモです。
環境
- Growi v7.3.2 → v7.3.3にアップデートする際の出来事
- ※ こちらの手順でv7.3.xにアップデート済み
- Growiの実行ユーザは
root
- node v20.19.2
- npm 11.4.0
- Apacheによるリバースプロキシ
どの段階でエラーが発生したか
sudo git checkout
→sudo pnpm i
→sudo npm run app:build
を実行時に
Tasks: 0 successful, 7 total
Cached: 0 cached, 7 tota
Time: 25.08s
Failed: @growi/pdf-converter#gen:swagger-spec
ERROR run failed: command exited (1)
が出たのでappのビルドが通りませんでした。
エラーの原因
@growi/pdf-converter
が利用する@tsed/openapi-utils
というパッケージが、@tsed/di
という別のパッケージからcontext
という機能をインポートしようとしていますが、インストールされている @tsed/di のバージョンにその機能が存在しないため、SyntaxError となっています。
これは、pnpm のキャッシュや node_modules ディレクトリの状態が不整合になっている場合に発生するということを突き止めました。
もっと有り体に言うと、筆者環境はGrowiはv7.2.x→v7.3.xと順調にアップデートを重ねていったので、パッケージの混在が発生。言うなれば、複数の設計図が混じっていたので(依存関係の不適合)、建設を担当するnpmが「設計図と実装が矛盾している」としてエラーを吐いた次第です。
大前提
Growiプロセス停止確認(systemdに登録している場合)
systemctl status growi.service
で、growiが完全に停止していることを確認してください。
さっくりとした対処
- 依存関係をクリーンにします。
- 混在しているパッケージを退避します。
- パッケージを再インストールします。
- Growiのビルドを改めて実行します。
依存関係をクリアする
- Growiルートディレクトリに移動&確認 (特に重要な作業)
※調査中に別のディレクトリに遷移しているということは極めて多く発生します。特にエラーの対処となればなおさらです。改めて、作業の現在地を確認します。
cd /growi/root/directroy && pwd
自分の環境に合わせます。(筆者環境/home/www-data/growi
)
- キャッシュクリア
sudo pnpm store prune
node_modules
ディレクトリの退避
- ディレクトリ退避前確認
ls -ld node_modules
ディレクトリがあることを確認します。
sudo mv node_modules /path/to/backup/directory/node_modules.$(date +%Y%m%d)
任意のバックアップディレクトリを退避。$(date +%Y%m%d)
変数をつけることで現在の日付を付与します。
- ディレクトリ退避確認
ls -ld node_modules
ディレクトリがないことを確認します。
- 退避ディレクトリ確認
ls -ld /path/to/backup/directory/node_modules.$(date +%Y%m%d)
退避ディレクトリがあることを確認します。
node_modules
再配置
- 再配置
sudo pnpm install
再びnode_modulesが配置されます。
- 再配置確認
ls -ld node_modules
ディレクトリがあることを確認します。
- ビルド
sudo npm run app:build
Growiの再開
- Growiサービス開始
sudo systemctl restart growi.service
- サービス開始確認
systemctl status growi.service
active(running)
を確認します。サービスが完全に上がっていないとブラウザでGrowiにアクセスしても503エラーが出ます。しばらく待ちましょう。
アップデート確認
Growiが最新バージョンにアップデートされていれば対処完了です。