Rocket.Chat を移行したのですが、アップロード済みファイルの URL と、サイト URL のリセット値が、移行前の古い URL のままになっていました。

概要
- Rocket.Chat を移行し、ドメイン (サイトURL) が変わった
- その際、Rocket.Chatを 3.10.14 から 6.2.12 にアップグレードしている
- MongoDB も 4.0 から 5.0 にアップグレード
- Rocket.Chat 起動時に指定する環境変数
ROOT_URL
は移行後の URL を設定済み - Rocket.Chat の管理者メニューで設定できる
サイト URL
も移行後の URL を設定済み
この状況で、以下の2つの不具合を確認しました。
- アップロード済みのファイルの URL (ダウンロードリンク) が移行前の古い URL になっている
- Rocket.Chat の管理者メニューで設定できる
サイト URL
について、リセットボタンを押すと移行前の古い URL がセットされる
先に結論
1.
については MongoDB のデータを直接修正すれば直りました。2.
については未解決です。
MongoDB のデータを確認することにしたきっかけ
いろいろググっていく中で以下のページに辿り着きました。
こちらの方法を試しても今回発生している不具合は直りませんでしたが、これをきっかけに MongoDB の中身を調査していくことで修正できました。
MongoDB の中身の確認方法については以下が参考になりました。
調査の過程と修正方法
Rocket.Chat と MongoDB は docker で動かしています。
なので、まず MongoDB の docker コンテナに入ります。
$ docker exec -it rocketchat-mongo bash
コンテナに入ったら MongoDB シェルを開き、rocketchat
のデータベースを選択します。
# mongo
> use rocketchat
コレクションを表示してみます。
> show collections
たくさん表示されますが、ここから不具合内容に該当する箇所を推測して調査していきます。
1. アップロードファイルのダウンロードリンクについて
前述の 1.
についてですが、こちらはアップロードファイルに関することなので、rocketchat_uploads
の中身を表示してみました。
> db.rocketchat_uploads.find()
20件のみ表示されますが、適当なデータ一件について中身をみると以下のような感じになっていました。
{
"_id": "27JzjqpXHxAHBzaxp",
"name": "hoge.jpg",
"size": 51268,
"type": "image/jpeg",
"rid": "MgKrXXN4XmQwtMMjgjXnWzpNvR6YrRpH4F",
"userId": "jXnWzpNvR6YrRpH4F",
"store": "GridFS:Uploads",
"_updatedAt": ISODate("2023-07-26T03:58:50.233Z"),
"instanceId": "R252ARSHBKR3RrXHY",
"identify": {
"format": "jpeg",
"size": {
"width": 495,
"height": 700
}
},
"complete": true,
"etag": "HoMjiYj2fbb799RFK",
"path": "/ufs/GridFS:Uploads/27JzjqpXHxAHBzaxp/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A%201.jpg",
"progress": 1,
"token": "68c8A8CAb8",
"uploadedAt": ISODate("2023-07-26T03:58:50.852Z"),
"uploading": false,
"url": "http://old_domain:port/ufs/GridFS:Uploads/27JzjqpXHxAHBzaxp/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A%201.jpg",
"typeGroup": "image"
}
見てわかる通り、url
のフィールドにファイルへの絶対パスが記録されているため、これを修正しないと直らないんじゃないかと思いました。
というわけで、以下のコマンドでドメインの部分のみを置換します。
db.rocketchat_uploads.find().forEach(function(row) {
row.url = row.url.replace(new RegExp("old_domain", 'g'), "new_domain");
db.rocketchat_uploads.save(row);
});
これで Rocket.Chat のほうを確認すると、URL が直っていました。
2. サイト URL` のリセット値について
次に前述の 2.
についてですが、設定に関することなので rocketchat_settings
を確認してみました。
こちらはついては中身を全てを見たかったので、以下のようにして json ファイルに出力して確認しました。
$ mongoexport -d rocketchat -c rocketchat_settings -o rocketchat_settings.json --type=json mongodb://localhost:27017
で、中身を確認してみましたが、それらしい設定は見当たりませんでした。
他のコレクションもいろいろ確認してみましたが、それらしい設定は見つかっていません。
というわけで未解決ですが、特に実害はないので放っておいてます。