はじめに

マストドンインスタンスを立ててからアップデートをどのタイミングで行うかについて、しばらく様子を見ていたのですが、v1.4系になって色々機能が追加されたのを使いたいということでアップデートすることになりました。

Vagrantなローカル環境で検証した時の作業メモです。

アップデートするのに必要な作業はReleases · tootsuite/mastodonを遡って確認しました。

パッケージの追加

$ sudo apt-get install pkg-config libprotobuf-dev protobuf-compiler -y

Node.jsのアップデート

サポートするNode.jsのバージョンが6以降となったのでアップデートします。

$ sudo npm install n -g
$ sudo n stable
$ sudo ln -sf /usr/local/bin/node /usr/bin/node

v1.4.6をマージ

このインスタンスでは、画像を差し替えるなど本家のソースコードを改変している箇所があります。なので本家のソースコードをマージします。origin はこのインスタンスのリポジトリを登録しているのでupstream に本家のリポジトリを登録します。このインスタンスのブランチはdevelop です。

$ git remote add upstream https://github.com/tootsuite/mastodon.git
$ git checkout -b master origin/master
$ git fetch upstream
$ git merge upstream/master
$ git checkout -b v1.4.6 v1.4.6
$ git checkout develop
$ git merge v1.4.6

ソースコードを改変した箇所でコンフリクトしたので修正します。また、変更内容をorigin にpushして本番環境ではpullします。

アップデート

$ bundle install
$ yarn install
$ bundle exec rails mastodon:maintenance:prepare_for_foreign_keys
$ bundle exec rails db:migrate
$ bundle exec rails assets:precompile
$ bundle exec rails r Rails.cache.clear

本番環境ではbundle exec のところにRAILS_ENV=production が入ります。

サービス起動

作業前にサービスを停止していたので起動します。

$ foreman start

動作確認

動作確認をしたところ、お気に入りが表示されない不具合が発生しました。

本家のissueに同様の不具合が挙がっていて解決法も示されていました。v1.4.6 タグではなくmaster ブランチで作業を行えば解決できるみたいなのでmaster ブランチをマージしてアップデートコマンドをやり直して動作確認できました。

$ bundle install
$ yarn install
$ bundle exec rails db:migrate
$ bundle exec rails assets:precompile