DebianをUpgradeしたらRedmineが動かなくなった件

DebianをJessieからStretchにアップグレードしたらRedmineが動かなくなりました。

MediaWikiやWordpressなどが動いている環境でそのままアップグレードしてもまったく問題なかったため、完全に油断してRedmineが動いているサーバでも同じように実行したらRedmineはダメでありました。

現象

Debian8.9+Apache2+Redmineで稼動していたサーバで、aptのsources.listをjessie→stretchに書き換えてdist-upgradeしたらRedmineがエラーを吐きました。

ブラウザからアクセスすると「We’re sorry, but something went wrong」という画面が表示される、という現象になりました。

しかしSomethingがwrongしたことしかわからないので、Apache2のエラーログを見ると、どうやらpassengerのエラーで、Message from application:Bundler::PermissionErrorと書いてありました。

おそらくアップグレード時にRedmineのインストールフォルダのパーミッションが変更されてしまったのでしょう。

解決策

chown www-data:www-data -R /usr/share/redmine

このように実行してインストールフォルダの所有者を全部Apacheにしてやるとアクセスできるようになりました。

更なる問題

ログインするとInternal Error500と、サーバエラーを吐いて止まるという現象・・・

今度はApacheではなくRedmineのほうのログを確認すると、データベースエラーで、Unknown Columnというのが出ているようです。

その解決策

そこで以下を実行。

rake db:migrate RAILS_ENV=production

これで無事にログインできるようになり、さぁ「マイページ」を表示・・・

またもInternal Error。再びログを確認するとどうやらテンプレートでエラーが発生している様子。

結局のところ、プラグインとDBのマイグレーションを実行し、キャッシュ類をクリアしてWebサーバを再起動する、というのがベストっぽいです。

rake db:migrate RAILS_ENV=production
rake redmins:plugins:migrate RAILS_ENV=production
rake tmp:session:clear
rake tmp:cache:clear

systemctl restart apache2

この操作はRedmineのインストールディレクトリ(Rakefileが置いてある場所)で実行します。

Apache2の再起動はいろんな方法がありますが、一応Debian9で推奨されているSystemctlで実行しました。(まだservice apache2 restart)のほうが手に馴染んでますが・・・)

まとめ

Debian8→9へのアップグレードは、考えてみればRedmineのアップグレード、Ruby、Gem、Bundler、Passengerなどのアップグレード、MySQL→MariaDBへの更新などなど、Redmineに関するありとあらゆるものがアップグレードされたといっても過言ではない状況で、そんなものまともに動くはず無いだろ、ということなのでありました。安易にdist-upgradeしちゃダメでありました。

修復手順としては

  1. RedmineインストールフォルダのPermissionを変更してApache2がアクセスできるようにする
  2. Redmine関係のmigrateを実行(rake)
  3. キャッシュ関係のクリア(rake)
  4. Apache2の再起動

という感じでした。これで無事、新しい環境へアップグレードできました。