WindowsのRedmineアップデート作業記録(3.0.4→3.4.6) 

# 概略
私が勤務する会社ではRedmineを使用しているのだが、元々の管理者が退職したため、RubyとかRailsとかまったく触っていない私が管理者になっている。社内の要望に応えてRedmineを更新することになったが、かなり大変な作業になってしまったので、備忘録と他の人の参考になれば良いなと思って記事を書くことにした。

なお、bitnamiを使わなかった理由は次の通り。
- 元々、bitnamiを使わずにセットアップされていた
- インストールしたらphpをセットアップできなかった

# 動作環境
- OS：Win 8
- 元のRedmine：3.0.4
- 変更後のRedmine：3.4.6

# 手順
基本的にはRedmine 3.4.6が動作する環境を作成して、3.0.4のデータベースとプラグインなどを引き継げばよい。（言葉にすると簡単だが、作業はかなり大変だった）

1. 必要なモジュールを準備する  
    - Ruby 2.3.3 (https://rubyinstaller.org/downloads/)
    - Development KIT(For use with Ruby 2.0 to 2.3) (https://rubyinstaller.org/downloads/)
    - Redmine 3.4.6 (https://www.redmine.org/projects/redmine/wiki/Download)
    - Image Magick 6.9.2.7 (http://ftp.icm.edu.pl/packages/ImageMagick/binaries/)  
    - MySQL Server 5.7.22 (https://dev.mysql.com/downloads/windows/installer/5.7.html)  
<br />
上記はこの組み合わせだとうまく動いたというもの。最初はRuby 2.4を使うつもりだったが、[mysql2が2.4に対応していなかった](https://github.com/brianmario/mysql2/issues/861) のでRuby2.3を使った。
<br />
<br />
1. データベースのバックアップ  
    - 旧データベースの内容をバックアップする。

    ```
    > mysqldump --single-transaction -u [username] -p [databse] > [file]
    ````

1. 既存サービスの停止
    - Windowsのサービス一覧を開き MySQL を停止する。
    - Windowsのサービス一覧を開き Redmine を停止する。
    - Redmine をサービスから削除する。
    
    ```
    > sc delete redmine
    ```
<br />
1. 既存プログラムのアンインストール  
    - image-magick をアンインストールする  
    - ruby をアンインストールする 
    - MySQL をアンインストールする   
    - devkit フォルダ を削除する  
<br />
1. 新しいプログラムのインストール
    - rubyinstaller-2.3.3-x64.exe を実行して Ruby をインストール  
       - [インストール先とオプションの指定]で次のチェックを有効にしておく   
       Rubyの実行ファイルへ環境変数PATHを設定する
    - DevKit-mingw64-64-4.7.2-20130224-1432-sfx.exe を実行して DevKitをC:\DevKit に展開  
    - ImageMagick-6.9.8-2-Q8-x64-dll.exe を実行して ImageMagick をインストール  
        - [Select Addtional Tasks] で次のチェックを有効にしておく  
        Add application directory to your system path  
        Install development headers and libraries for C and C++  
 - （必要があれば）MySql 5.7 に必要なモジュールをインストール  
        - .Net 4.5.2
        - VC++ 2013 Redistributeable 
 - mysql-installer-web-community-5.7.22.1.msi を実行して MySql 5.7 をインストール  
        - [Setup Type]でServer onlyを選択  
        - [Accounts and Roles]で Redmine ユーザーを追加  
<br />
1. Redmineの展開  
    - redmine-3.4.6.zipを解凍して適当なフォルダに移動する  
    - 旧redmineの config/databse.yml, config/configuration.yml を config\ にコピーする  
<br />
1. Redmineの実行環境構築  
    - スタートメニューから[Rubyコマンドプロンプトを開く]を管理者として実行  
    - bundlerをインストール  
 
    ```code=shell
    > gem install bundler  
    ```
    - カレントディレクトリをredmineの実行環境にする(eg. c:\redmine\redmine-3.4.6)  
    - gemfile にthin, thin_servicceをインストールするよう追加。mysql2をダウングレードするよう変更。  

    ```code=shell
    gem "thin"
    gem "thin_service"

    #gem "mysql2", "~> 0.4.6", :platforms => [:mri, :mingw, :x64_mingw]
    gem "mysql2", "0.3.21"
    ```
    - gemのインストール（rmagickのインストールで時間がかかります） 

    ```
    > bundle install --without development test 
    ```
<br />
1. データベースの初期化  
  - redmine データベースの作成
    スタートメニューから [MySQL Command Line Client] を開く。
   
    ``` shell
    > show databses;           // redmineの存在確認
    > create databse redmine;  // なければ作成
    ```
    - 以前のデータベースをリストアする  

    ``` shell
    > "C:\Program Files\MySQL\MySQL Server 5.7\bin\mysql.exe" -u redmine -p -D Redmine --default-character-set=utf8 < [file]
    ```
  - データベースのアップデート

    ``` shell
    > rake generate_secret_token     // 秘密鍵の生成
    > set RAILS_ENV=production       // 環境の設定
    > rake db:migrate                // マイグレート
    > rake redmine:load_default_data // デフォルトデータの登録
   ```
<br />
1. WEBアプリとしての動作確認
下記コマンドを実行してプロセスで起動する。ブラウザから http: //localhost:3000/ へアクセスしてRedmineを使用できればOK。

    ```
    > bundle exec rails server webrick -e production
    ```
<br />
1.  添付ファイル、プラグイン、テーマのコピー
    - 旧redmineのfiles\をコピーする
    - 旧redmineのplugin\をコピーする  
    - 旧redmineのpublic\themesをコピーする  
    - Webアプリとして起動できるか確認する  
<br />
1. サービスとして起動
    - 下記コマンドを実行してWindowsのサービスに登録

    ```
    > thin_service install -N "Redmine" -c [redmineのフォルダ] -p [port番号] -e production
    ```
    - Windowsのサービス一覧から、Redmine のプロパティを開いて、スタートアップの種類を 自動 に変更
    - ブラウザからアクセスして使用できれば成功。

# 参考
下記記事にはたいへんお世話になりました。感謝感謝です。

- https://qiita.com/mas0061/items/57feb9d116186697780f  
本記事のベースにさせていただきました。
- https://stackoverflow.com/questions/44912535/rails-5-and-ruby-2-3-3-failed-to-load-libmysql-dll  
gemのインストールでlibmysql.dllのロードに失敗したときの対処法
- http://www.ownway.info/Ruby/rmagick/howtoinstall/windows#troublesoothing
RMagickとImageMagickの組み合わせについての情報です。
- https://redmine.org/boards/2/topics/49833  
Redmineでプロジェクトに移動するとエラーが出た時に参考にしました。まず、リストアをしてからマージしないとエラーになるようです。
- http://artisan.hatenablog.com/entry/20070927/1190899125  
DBのリストアでエラーになったときの対処法（文字コードの問題）