2017/10/21

[Mastodon]v2.0.0アップデート方法と苦労したお話


はじめに

Mastodon の v2.0.0 がリリースされたので、ではということで v1.6.1 からバージョンアップしようとしたところ失敗しました。失敗の原因が分からず、ごちゃごちゃやっていたらデータベースもおかしくなり環境が完全に壊れてしまいました。

幸い、バックアップを取っていたので苦労したもののリカバリに成功しました。その際の方法は以下の記事にまとめたので参考までに掲載しておきます。

なお、v2.0.0へのアップデートは、Ruby 2.4.1からRuby 2.4.2へのアップデートが推奨されています。ここの辺も苦労したので、その点も含めバージョンアップ方法を掲載します。環境は、さくらVPSの CentOS7 で Non-Docker になります。

バージョンアップその前に

どの Mastodon のバージョンに限ったわけではないですが、Mastodon のバージョンアップ前には必ずバックアップするようにしましょう。正直、なにが起きるのか分からないのでバックアップは必須ですね。

バックアップは以下のように行います。

$ su - mastodon
$ mkdir dbbackup
$ cd dbbackup
$ pg_dump --username=postgres --no-owner mastodon_production > prefix.`date +%Y%m%d_%H%M%S`.pgdump

これだけのことなので、お忘れなく。

 

Ruby のバージョンアップ

CentOS7 のデフォルトの Ruby をバージョンアップしたくなかった(サポートの関係)のと、rbenv を利用すれば複数バージョンの Ruby を管理できるので rbenv を使用して Ruby をバージョンアップすることにします。

自分では覚えていなかったのですが、rbenv は Mastodon 導入時にインストールしてあったのでインストール後の作業の説明をしていきますが、rbenv をインストールしていない方は以下の記事を参考にしてください。

 さて、まずは rbenv をアップデートします。

$ su - mastodon
$ cd ~/.rbenv
$ git pull

 次に、ruby-build のアップデートを行います。これを行わないと Ruby 2.4.2 がインストールできないようなので。

$ cd ~/.rbenv/plugins/ruby-build/
$ git pull

 では Ruby 2.4.2 をインストールします。結構時間がかかるので気長に待ってください。

$ rbenv install 2.4.2

インストールが完了したら Ruby のバージョンを調べてみます。

$ ruby -v
ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux]

おやおや? Ruby 2.4.2 をインストールしたのにバージョンアップされてませんね。これは rbenv で以下のようにコマンドを実行することでバージョンを切り替えることができます。

$ rbenv global 2.4.2

もう一度、Ruby のバージョンを調べてみると正しくバージョンが切り替わっていることが分かります。

$ ruby -v
ruby 2.4.2p198 (2017-09-14 revision 59899) [x86_64-linux]

 

Mastodon のアップデート

では、Mastodon を v2.0.0 にバージョンアップします。mastodon ユーザーでログインしていることを前提にします(su で既に切り替えているので)。

まずは、v2.0.0 のソースコードを引っ張ってきます。

$ cd ~/live
$ git fetch
$ git checkout v2.0.0

次に、いつものように bundle install を実行しますがエラーが出てうまくいきません。

$ bundle install
rbenv: bundle: command not found

The `bundle' command exists in these Ruby versions:
2.4.1

これは、Ruby 2.4.1 用の bundle はインストールされているけれども、Ruby 2.4.2 用の bundle がインストールされていないことが原因です。なので、以下のコマンドで bundle をインストールし、bundle install 、yarn install を実行します。

$ gem install bundler
$ bundle install
$ yarn install

次に、DBのアップデートとモジュールのコンパイルを実行します。どちらも時間がかかります。

$ RAILS_ENV=production bundle exec rails db:migrate
$ RAILS_ENV=production bundle exec rails assets:precompile

Mastodon のサービスを再起動します。

$ sudo systemctl restart mastdon-*

普通だったらこれでバージョンアップが完了するのですが、なぜか今回は 500 エラーのレスポンスは返って来るし、ソースコードのバージョンも 1.6.1 の表記から変わりません。

これが罠でデータを飛ばすことになってしまいましたが、解決方法は OS のリブートでした。以前にも同じようなことがあったので、OS のリブートも手順として考慮してもいいかもしれませんね。

$ sudo reboot

リブート後、Mastodon にアクセスすると無事にアップデートされていることが確認できました。

 

おわりに

今回のバージョンアップにはなかなか苦労させられました。

こんなに時間をかける予定ではなかったので苦労感もひとしおです。

特に、最後のリブートしないとうまくいかないのは罠でした。

他の方が同じ問題で苦しまないことを祈り記事を終えます。


スポンサーリンク


このエントリーをはてなブックマークに追加




Twitter ではブログにはない、いろんな情報を発信しています。


コメント

コメントを書く



プロフィール

  • 名前:fnya
    経歴:
    SE としての経験は15年以上。様々な言語と環境で業務系システム開発を行い、セキュリティ対策などもしていました。現在は趣味SE。

    Twitter では、ブログでは取り上げない情報も公開しています。


    ブログについて

    このブログは、IT、スマートフォン、タブレット、システム開発などに関するさまざまな話題を取り上げたり、雑感などをつづっています。


    >>ブログ詳細
    >>自作ツール
    >>運営サイト
    >>Windows 10 まとめ

    Twitter のフォローはこちらから Facebook ページはこちら Google+ページはこちら RSSフィードのご登録はこちらから