[Redmine] 4.1.0から4.2.1へアップグレードする手順

大きくバージョンを飛ばしてアップグレードすると、トラブルが発生する可能性が上がる(と思っている)ので、そろそろRedmineをアップグレードしておきます。

今回、アップグレードする環境では、Redmine4.1.0が動いています。これを、2021年7月時点で最新版となる4.2.1にアップグレードしていく手順をメモメモ。

最新版をダウンロードして展開する

現在のRedmine 4.1.0のインストール先を /var/lib/redmine として話を進めますので、違う場所にインストールしている場合は適宜読み替えてください。

Redmineの最新版(2021年7月時点で4.2.1)をダウンロードして展開します。

# cd /var/lib
# curl -O https://www.redmine.org/releases/redmine-4.2.1.tar.gz
# tar xvf redmine-4.2.1.tar.gz

展開したRedmine4.2.1の所有権をapacheに変更します。

# chown -R apache:apache /var/lib/redmine-4.2.1

古い環境から必要なファイルをコピーする

4.1.0の環境から、データベースの設定ファイルとRedmineの設定ファイルをコピーします。

# cp -a ./redmine/config/database.yml ./redmine-4.2.1/config/
# cp -a ./redmine/config/configuration.yml ./redmine-4.2.1/config/

プラグインをコピーします。今回の環境ではView Customizeというプラグインだけを使用しているので、このプラグインをコピーします。

# cp -ar ./redmine/plugins/view_customize ./redmine-4.2.1/plugins/

今まで、Redmineにアップロードしたファイルなどがあれば、それらもコピーしておきます。

# cp -ar ./redmine/files ./redmine-4.2.1/

新しいRedmineのセットアップを行う

新しいバージョンのRedmineに、依存パッケージをインストールします。新しいRedmineを展開したディレクトリで実行する必要があります。

# cd /var/lib/redmine-4.2.1
# bundle install --without development test --path vendor/bundle

セッションの改ざんを防止するための秘密鍵を作成します。

# bundle exec rake generate_secret_token

DBのマイグレーションを行います。

# bundle exec rake db:migrate RAILS_ENV=production

キャッシュをクリアします。

# bundle exec rake tmp:cache:clear RAILS_ENV=production

Apacheの設定を書き換え、Redmineの参照ディレクトリを変更します。

# vi /etc/httpd/conf.d/redmine.conf

エイリアスの変更
Alias /redmine /var/lib/redmine/public
          ↓
Alias /redmine /var/lib/redmine-4.2.1/public

アプリケーションルートの変更
PassengerAppRoot /var/lib/redmine
          ↓
PassengerAppRoot /var/lib/redmine-4.2.1

参照ディレクトリの変更
<Directory "/var/lib/redmine/public">
          ↓
<Directory "/var/lib/redmine-4.2.1/public">

設定ファイル書き換え後、Apacheを再起動すればアップグレード完了です。

# apachectl configtest
# systemctl restart httpd

以前紹介したカスタマイズを再度設定する

以前紹介した「Redmineで開始日が過ぎたチケットにCSSで装飾してお知らせするカスタマイズ」や「期日がきたチケットは色を変えてお知らせするカスタマイズ」を実装している方は、再度設定が必要です。

ここで編集するissue.rbというファイルの中身は、Redmineのバージョンによって変化するので、古い環境からコピーしてしまわないよう注意!

# cd /var/lib/redmine-4.2.1/app/models
# vi issue.rb

950行目のあたりにある、overdue処理の後に追加します。
# Returns true if the issue is overdue
def overdue?
  due_date.present? && (due_date < User.current.today) && !closed?
end

#------ Add Start
def overdue_days_before(days_before)
  due_date.present? && (due_date < User.current.today.since(days_before.days)) && !overdue?  && !closed?
end

def start_days_after(days_after)
  start_date.present? && ((start_date - 1 ) < User.current.today.since(days_after.days)) && !closed?
end
#------ Add End

1440行目のあたりにあるクラス付与処理の途中に追加します。
# Returns a string of css classes that apply to the issue
def css_classes(user=User.current)
  s = +"issue tracker-#{tracker_id} status-#{status_id} #{priority.try(:css_classes)}"
  s << ' closed' if closed?
  s << ' overdue' if overdue?
#------ Add Start
  s << ' overdue_1day_before' if overdue_days_before(1)
  s << ' overdue_3days_before' if overdue_days_before(3)
  s << ' start_days' if start_days_after(0)
#------ Add End
  s << ' child' if child?
  s << ' parent' unless leaf?
  s << ' private' if is_private?
  s << ' behind-schedule' if behind_schedule?
  if user.logged?
    s << ' created-by-me' if author_id == user.id
    s << ' assigned-to-me' if assigned_to_id == user.id
    s << ' assigned-to-my-group' if user.groups.any? {|g| g.id == assigned_to_id}
  end
  s
end

書き換えが終わったら、Redmineを再起動します。以下のコマンドを実行後、ブラウザからRedmineにアクセスすることで再起動されます。

# cd /var/lib/redmine-4.2.1/tmp
# touch restart.txt

もしくは、Apacheを再起動してしまってもOKです。

# systemctl restart httpd

「Redmineで開始日が過ぎたチケットにCSSで装飾してお知らせするカスタマイズ」や「期日がきたチケットは色を変えてお知らせするカスタマイズ」については、以下の記事で紹介しています。

先日、期日がきたチケットは色を変えてお知らせするカスタマイズ方法をご紹介しましたが、今回は、開始日を過ぎたチケットに、CSSで装飾をしてお知らせするカスタマイズ...
Redmineのチケット一覧表示は、デフォルトの状態では過ぎてしまった期日が赤く表示される以外、特に強調表示や色を変えての表示はありません。 期日当日のチケッ...

さいごに

以上でアップグレード作業が完了しました。特に難しいことはないと思いますが、何かトラブルがあるといけないので、作業前にバックアップだけは確実に取っておきましょう。

4.1系から4.2系になることで、一部、バージョンに依存したプラグインなどが動かなくなったり、不具合を起こす可能性があります。プラグインの移行は慎重に行ってください。

ちなみにView Customizeというプラグインは、問題なく動作しています。

本当はこまめにアップグレードすることが望ましいですが、なかなかそうもいかず。ですが、せめて1年に一度くらいは作業しておきたいものですね。

初稿:2021年7月31日