MastodonがRuby2.4.2に対応したのでアップグレードしたときのメモです。Dockerなしのやり方でインストールしたものです。
Ruby2.4.2にアップグレード
Rubyを2.4.1から2.4.2にアップグレード
$ rbenv install 2.4.2
ruby-build: definition not found: 2.4.2
See all available versions with `rbenv install --list'.
If the version you need is missing, try upgrading ruby-build:
brew update && brew upgrade ruby-build
とまあ、2.4.2が見つからないとなってできないので
rbenvとruby-buildを更新します。
まず、rbenvの更新
$ cd .rbenv
$ git pull
...
修正されていたりするのでcommitしてmergeしてからpullするようですね。
次にruby-build
$ cd ~/.rbenv/plugins/ruby-build/
$ git pull
...
2.4.2をビルドする
$ rbenv install 2.4.2
Downloading ruby-2.4.2.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.2.tar.bz2
...
デフォルトで使うrubyのバージョンを変更する
現状確認
$ cd ~
$ rbenv versions
system
* 2.4.1 (set by /home/mastodon/.rbenv/version)
2.4.2
$ ruby -v
ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux]
デフォルトに2.4.2と設定する
$ rbenv global 2.4.2
確認
$ rbenv versions
system
2.4.1
* 2.4.2 (set by /home/mastodon/live/.ruby-version)
$ ruby -v
ruby 2.4.2p198 (2017-09-14 revision 59899) [x86_64-linux]
mastodonを更新
普通に更新する場合は
$ cd ~mastodon/live/
$ git fetch
$ git checkout $(git tag | tail -n 1)
$ RAILS_ENV=production bundle exec rails db:migrate
$ yarn install
$ RAILS_ENV=production bundle exec rails assets:precompile
$ sudo systemctl restart mastodon-*.service
なのですが、git checkoutでcommitしろとかmergeしろとかでます。修正してますからcommitしてからcheckoutします。
mastodonのrubyのディフォルトを確認
$ cat ~/live/.ruby-version
2.4.2
これが2.4.1だとruby2.4.2では動かないです。
bundleすると、ないといってくるので2.4.2版がないということですからそのほかのものもアップグレードします。
$ gem install bundler
$ bundle install
$ yarn install
yarnもバージョンを上げないておかないと出来ないのであらかじめyum等でアップグレードします。
また、必要なライブラリをインストールしないとだめな場合があります。
私の環境では、以下のライブラリパッケージを追加でいれないといけませんでしたのでyumでパッケージをインストールしました。
libicu-devel
libidn-devel
protobuf-devel
そして
$ RAILS_ENV=production bundle exec rails db:migrate
を実行すると大抵の場合は
Migrating to AddForeignKeysForAccounts (20170604144747)
== 20170604144747 AddForeignKeysForAccounts: migrating ========================
-- add_foreign_key(:statuses, :accounts, {:on_delete=>:cascade})
-> 0.0232s
-- add_foreign_key(:statuses, :accounts, {:column=>:in_reply_to_account_id, :on_delete=>:nullify})
-> 0.0254s
-- add_foreign_key(:statuses, :statuses, {:column=>:in_reply_to_id, :on_delete=>:nullify})
rails aborted!
StandardError: An error has occurred, this and all later migrations canceled:
PG::ForeignKeyViolation: ERROR: insert or update on table "statuses" violates foreign key constraint "fk_rails_94a6f70399"
DETAIL: Key (in_reply_to_id)=(881) is not present in table "statuses".
: ALTER TABLE "statuses" ADD CONSTRAINT "fk_rails_94a6f70399"
FOREIGN KEY ("in_reply_to_id")
REFERENCES "statuses" ("id")
ON DELETE SET NULL
....以下略
DBの更新で失敗します。フォーリンキーがどうしたこうしたとなるので
$ RAILS_ENV=production bundle exec rails mastodon:maintenance:prepare_for_foreign_keys
を実行してから再度やります。
$ RAILS_ENV=production bundle exec rails db:migrate
$ yarn install
$ RAILS_ENV=production bundle exec rails assets:precompile
サービスを再起動して完了です。
$ sudo systemctl restart mastodon-*.service
こちらもチェック!