Mastodonをv3.0.xからv3.1.xに上げたときのトラブル対処法

# 概要
Mastodonをv3.0.x系から一気にv3.1.xに上げたらgem周りが原因でsidekiqが死んでコケた

## 症状
Mastodonの連合TLがアップデートしたタイミングから一切更新されなくなった

# トラブルシューティング

## gem編

### 原因解明
#### まず、Sidekiqを覗きに行く

<img width="1187" alt="スクリーンショット 2020-06-06 04.32.44.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104876/f2de11c9-8fba-5fda-109d-3b2b914ba414.png">

待機状態がやたら多く、その割にはデッドは0だし再試行数も極端に少ない。

Sidekiqが動いていないのが原因臭い

#### systemctlからログを覗く

当方Ubuntu 16.04環境でMastodonが稼働している為、

```shell
sudo systemctl status mastodon-sidekiq
```

でmastodonのsidekiqの直近の状態とログが覗ける。CentOSの場合はコマンドが異なるのであしからず。

すぐにログを取れなかったので載せれないが、gemの一部がビルドできてねえぞみたいなエラーが見えた。

それもそのはず。確かにアップデート後のbundle installをしていたらかなりの数のgemが ` Ignoring gemfile名 because its extensions are not built. Try: gem pristine gemfile名 --version ` とエラーを吐いていた。
参考: https://qiita.com/MIRAI1221/items/cfae7e7eb3ddba01e999

### 解決方法

先の章で参考にしたサイトでは

```shell
gem pristine gemfile名 --version
```

この方法でかいけつできるとのことだったが、相当数が同様のエラーが出ていたのでこの参考記事の方法ではとても解消できない。そこで、 `gem pristine` のオプションを探ったところ、 `--all` がちゃんとあるじゃないか。

念の為、mastodon/live配下(Mastodonのディレクトリ配下、多分最近入れた人はデフォルトだとMastodonって名前でフォルダ作ってるんじゃないかな)にある `vendor/bundle` を全部消してgemを焼き払う。

参考: https://qiita.com/Yinaura/items/1a96fc77c81a2d6a4d95

```shell
rm -rf vendor/bundle
```

また、野生の感で、 gemコマンド側からもupdateしたほうがいいかなという気がしたので、やった。 `gem update --system` を叩いたが、これはあくまでシステム側の(nodeでいうと `yarn global update` とか `npm update -g` みたいなもの)をアップデートしただけなので多分意味はない。


んで、さっきのコマンドを叩く。

```
gem pristine --all
```

「Restored」とつくgemが大量に出てくるあたり、お察しである。

これが終わり次第、いつもどおりbundle installすればハイ完成。

```
bundle install
```

ターンエンドだ。Mastodonの再起動を掛ける。

<img width="1006" alt="スクリーンショット 2020-06-06 05.11.09.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104876/281afabf-c08e-e2a1-3edf-a97372f0b485.png">

動いてくれたみたい。めでたしめでた・・・よく見たら「Stopped mastodon-sidekiq」とか出てない？止まってる？

## sidekiq編

### 原因解明

#### 小手先の対処を試してみる

sidekiqのGUI管理画面を覗いてみると案の定動いてなさそう。
エラーメッセージでググりつつ、githubのrailsアプリのOSSのそれっぽいissueを見ながらいろいろ試してみたら、 

```shell
systemctl daemon-reload
systemctl stop mastodon-sidekiq
systemctl start mastodon-sidekiq
```

でも駄目だった。

#### systemctlからログを覗く

```shell
journalctl -r -u mastodon-sidekiq
```

でログをよく見てみると・・・うん？

<img width="1278" alt="スクリーンショット 2020-06-06 05.11.09.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104876/259db96b-c7a4-dbc0-1564-c2d24071dd44.png">

「 You are connecting to Redis v3.0.6, Sidekiq requires Redis v4.0.0 or greater 」とかいうめちゃくちゃ嫌な予感のするログを発見。しかもその直後にエラートレースしてコケてるじゃない。

調べてみれば、今のredisの最新stableはv6.0.4。公式リポジトリ古すぎ・・・でもwgetするのは嫌だしPPAは無いかな・・・

### 解決方法

Ubuntu公式リポジトリのredis: https://launchpad.net/ubuntu/+source/redi
Ubuntuのバージョン上がるとインストール可能なredisも上がるのね・・・
参考: https://weblabo.oscasierra.net/redis-ubuntu1604-install-apt/

あったけど、非公式で怖いなこれ・・・・やだなぁ。でも手間に背は変えられないので仕方ない。aptのレポジトリに追加します。

```
add-apt-repository ppa:chris-lea/redis-server
apt update
apt upgrade
```

redisは晴れて6.0.7まで上がりました。

めんどくさいので一旦reboot(おい)

<img width="1380" alt="スクリーンショット 2020-06-06 05.23.16.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104876/30d3c28c-086c-a219-084a-877251382f00.png">

今度はちゃんと生き生きとしたログ(?)が流れているようですし、sidekiqもちょっとずつキューが消化されているようなので、これにてトラブルシューティング完了。

# 結論

- v3.1.3からredisの必須バージョンが3以上から4以上になるからUbuntu16.04以下を使用して鯖立ててる人は要注意
- ` Ignoring gemfile名 because its extensions are not built. Try: gem pristine gemfile名 --version ` と見たら、わざわざ1個1個 ` gem pristine hoge ` しなくても ` gem pristine --all ` で一括操作できるよ
- readmeとリリースノートはちゃんと見ようね

## Try

説明書読まない癖で、もしかしてリリース情報にちゃんと手順書いてたかな？と思ったら、ありました

tootsuite/mastodon v3.1.3: https://github.com/tootsuite/mastodon/releases/tag/v3.1.3

`The minimum supported Redis version has changed from 3 to 4`

これ読んでたら少なくともredisでつまずくことはなかったですね。

ただ、gemに関しては何も書かれていなかったので、そんなものなのかな・・やだなぁ、こういうnodeみたいなところ・・・

## これを書いた理由

ここ最近jp鯖が色んな意味で不安定なせいか、アーリーマジョリティ層によるMastodon移民が一段落したからなのか、露骨にMastodonに関する知見記事が減ってる気がするので、雑にトラブルシューティングしたときのログを書き殴ってみた

## P.S.

学生エンジニア目指したい(新卒採用に携わるとよく見かけるまだ手を付けれてない学生君たち)にはぜひお一人様インスタンスを立てて、コスト意識とDevOpsとインフラ知識を身に着けてほしいと合うたびに言ってるんだけど、もっと心に響く説得方法が無いかな・・・