はじめに
昨年11月に開催された Redmine.Tokyo勉強会(第11回)で、ファーエンドテクノロジーの前田さんが「Redmineのバージョンアップに追従していくための一工夫」というセッションがありました。(セッションスライドのURLは次です)
http://www.slideshare.net/g_maeda/redmine-69542739
これによると、バージョンアップ作業を楽にするために、次の工夫をするとよいとありました。
そこで、現在Redmine 3.3.0を動かしているサーバーを3.3.2にアップデートする際にRedmineのコードをリポジトリからチェックアウトして使用することとします。
Redmineソースコードのチェックアウト
Redmineの公式リポジトリは次のURLになります。
http://svn.redmine.org/redmine/
本日時点でのRedmineの最新バージョンは3.3.2で、ブランチ名は3.3-stable、タグ名は3.3.2となります。
バージョンアップに追従するためには、リリースブランチをチェックアウトすることになります。そこで、本日時点の最新バージョンのリリースブランチである次をチェックアウトします。
http://svn.redmine.org/redmine/branches/3.3-stable/
~$ cd /var/lib lib$ sudo mkdir redmine-3.3-stable lib$ sudo chown redmine:redmine redmine-3.3-stable lib$ su redmine パスワード:******** lib$ svn co http://svn.redmine.org/redmine/branches/3.3-stable/ redmine-3.3-stable/ : リビジョン 16197 をチェックアウトしました。 lib$ ls redmine-3.3-stable/ CONTRIBUTING.md Rakefile bin db files plugins test Gemfile app config doc lib public tmp README.rdoc appveyor.yml config.ru extra log script vendor lib$
設定ファイル、プラグイン、テーマの移行
設定ファイルを、現在稼働しているredmine-3.3.0からコピーしてきます。
lib$ cd redmine-3.3-stable redmine-3.3-stable$ cp -p ../redmine-3.3.0/config/configuration.yml config/ redmine-3.3-stable$ cp -p ../redmine-3.3.0/config/database.yml config/ redmine-3.3-stable$ cp -p ../redmine-3.3.0/config/unicorn.rb config/ redmine-3.3-stable$ cp -p ../redmine-3.3.0/Gemfile.local .
プラグインディレクトリ下にインストールしたプラグインをコピーしてきます。
redmine-3.3-stable$ rsync -av ../redmine-3.3.0/plugins/ plugins/
テーマディレクトリ下にインストールしたテーマをコピーしてきます。
redmine-3.3-stable$ rsync -av --exclude alternate --exclude classic ../redmine-3.3.0/public/themes/ public/themes/
プラグインおよびテーマを最新に更新します。
各プラグインディレクトリへ移動し、リモートリポジトリから更新します。
redmine-3.3-stable$ cd plugins/clipboard_image_paste/ clipboard_image_paste$ git pull Already up-to-date. clipboard_image_paste$ cd ../redmine_banner/ redmine_banner$ git pull remote: Counting objects: 64, done. : redmine_banner$ cd ../redmine_embedded_flash/ redmine_embedded_flash$ git pull Already up-to-date. redmine_embedded_flash$ cd ../redmine_github_hook/ redmine_github_hook$ git pull Already up-to-date. redmine_github_hook$ cd ../redmine_glossary/ redmine_glossary$ git pull remote: Counting objects: 6, done. : redmine_glossary$ cd ../redmine_issue_templates/ redmine_issue_templates$ hg pull : added 1 changesets with 1 changes to 1 files (run 'hg update' to get a working copy) redmine_issue_templates$ hg update 1 files updated, 0 files merged, 0 files removed, 0 files unresolved redmine_issue_templates$ cd ../redmine_startpage/ redmine_startpage$ git pull Already up-to-date. redmine_startpage$ cd ../redmine_wiki_extensions/ redmine_wiki_extensions$ hg pull : no changes found redmine_wiki_extensions$ cd ../sidebar_hide/ sidebar_hide$ git pull remote: Counting objects: 33, done. : sidebar_hide$ cd ../view_customize/ view_customize$ git pull Already up-to-date. view_customize$
テーマについても同様更新します。
plugins$ cd ../public/themes/ themes$ cd farend_fancy/ farend_fancy$ git pull Already up-to-date. farend_fancy$ cd ../fedmine/ fedmine$ git pull Already up-to-date. fedmine$ cd ../gitmike/ gitmike$ git pull remote: Counting objects: 87, done. : gitmike$ cd ../redmine-theme-whitepaper/ redmine-theme-whitepaper$ git pull Already up-to-date. redmine-theme-whitepaper$
gemファイル群のインストール
redmine-3.3-stable$ bundle install --path vendor/bundler --without development test Warning: this Gemfile contains multiple primary sources. Using `source` more than once without a block is a security risk, and may result in installing unexpected gems. To resolve this warning, use a block to indicate which gems should come from the secondary source. To upgrade this warning to an error, run `bundle config disable_multisource true`. Your Gemfile lists the gem simplecov-rcov (>= 0) more than once. You should probably keep only one of them. While it's not a problem now, it could cause errors if you change the version of just one of them later. Fetching gem metadata from https://rubygems.org/ Fetching version metadata from https://rubygems.org/ Fetching dependency metadata from https://rubygems.org/ Resolving dependencies.................................... Installing rake 12.0.0 Installing i18n 0.7.0 Installing json 1.8.6 with native extensions Installing minitest 5.10.1 Installing thread_safe 0.3.5 Installing builder 3.2.3 Installing erubis 2.7.0 Installing mini_portile2 2.1.0 Installing rack 1.6.5 Installing mime-types-data 3.2016.0521 Installing arel 6.0.4 Installing public_suffix 2.0.5 Using bundler 1.12.5 Installing coderay 1.1.1 Installing concurrent-ruby 1.0.4 Installing htmlentities 4.3.1 Installing thor 0.19.4 Installing kgio 2.11.0 with native extensions Installing mimemagic 0.3.2 Installing mysql2 0.3.21 with native extensions Installing net-ldap 0.12.1 Installing ruby-openid 2.3.0 Installing raindrops 0.17.0 with native extensions Installing rbpdf-font 1.19.0 Installing redcarpet 3.3.4 with native extensions Using redmine_github_hook 2.2.0 from source at `/var/lib/redmine-3.3-stable/plugins/redmine_github_hook` Installing request_store 1.0.5 Installing rmagick 2.16.0 with native extensions Installing tzinfo 1.2.2 Installing nokogiri 1.6.8.1 with native extensions Installing rack-test 0.6.3 Installing mime-types 3.1 Installing addressable 2.5.0 Installing sprockets 3.7.1 Installing rack-openid 1.4.2 Installing unicorn 5.2.0 with native extensions Installing rbpdf 1.19.0 Installing activesupport 4.2.7.1 Installing loofah 2.0.3 Installing mail 2.6.4 Installing css_parser 1.4.7 Installing rails-deprecated_sanitizer 1.0.3 Installing globalid 0.3.7 Installing activemodel 4.2.7.1 Installing rails-html-sanitizer 1.0.3 Installing roadie 3.2.1 Installing rails-dom-testing 1.0.8 Installing activejob 4.2.7.1 Installing activerecord 4.2.7.1 Installing protected_attributes 1.1.3 Installing actionview 4.2.7.1 Installing actionpack 4.2.7.1 Installing actionmailer 4.2.7.1 Installing actionpack-action_caching 1.1.1 Installing actionpack-xml_parser 1.0.2 Installing railties 4.2.7.1 Installing sprockets-rails 3.2.0 Installing jquery-rails 3.1.4 Installing roadie-rails 1.1.1 Installing rails 4.2.7.1 Bundle complete! 38 Gemfile dependencies, 60 gems now installed. Gems in the groups development and test were not installed. Bundled gems are installed into ./vendor/bundler. redmine-3.3-stable$
セッション鍵の生成
redmine-3.3-stable$ bundle exec rake generate_secret_token /var/lib/redmine-3.3-stable/vendor/bundler/ruby/2.3.0/gems/htmlentities-4.3.1/lib/htmlentities/mappings/expanded.rb:465: warning: key "inodot" is duplicated and overwritten on line 466 redmine-3.3-stable$
データベースの移行
unicornを停止、念のためMySQLのダンプをしてから、データベース移行をします。
unicornの停止
~$ sudo service unicorn stop
MySQLのダンプ(バックアップ)
~$ mysqldump -uredminer -p db_redmine > redmine-mysql-$(date +%Y%m%dT%H%M%S).dump
データベース移行
redmine-3.3-stable$ bundle exec rake db:migrate RAILS_ENV=production : redmine-3.3-stable$ bundle exec rake redmine:plugins:migrate RAILS_ENV=production : redmine-3.3-stable$ bundle exec rake tmp:cache:clear tmp:sessions:clear :
添付ファイル置き場を移動し忘れていたので移動
redmine-3.3-stable$ mv files files.orig redmine-3.3-stable$ mv ../redmine-3.3.0/files/ .
シンボリックリンク(/var/lib/redmine)を/var/lib/redmine-3.3-stableに差し替え
~$ cd /var/lib lib$ sudo ln -nfs /var/lib/redmine-3.3-stable redmine
unicornの開始
~$ sudo service unicorn start
次回の更新でやる操作
これで、リポジトリから更新できるようになったので、次回からRedmineのバージョンアップで実施する操作は次のようになります。
Redmine 3.3.xへの更新
redmine-3.3-stable$ svn up redmine-3.3-stable$ bundle update redmine-3.3-stable$ bundle exec rake db:migrate RAILS_ENV=production redmine-3.3-stable$ bundle exec rake tmp:clear RAILS_ENV=production
Redmine 3.4系への更新
redmine-3.3-stable$ svn sw ^/branches/3.4-stable redmine-3.3-stable$ bundle update redmine-3.3-stable$ bundle exec rake db:migrate RAILS_ENV=production redmine-3.3-stable$ bundle exec rake tmp:clear RAILS_ENV=production