HerokuにRedmine 3.4.4 をデプロイしてみた(Windows)

#はじめに
普段は、ゲームリンクスというサークル名でフリーのノベルゲームなどの制作をしています。

今回、プロジェクト管理ツールである[Redmine](http://redmine.jp/)をゲームリンクスでのゲーム制作に導入することにしました。
本記事は、Heroku上にデプロイした時の手順をまとめたものとなります。

#導入に至った経緯

まず、昨年から外部のサークルなどと共同でゲーム制作を行うことが増えてきました。
とはいえ、互いの進捗状況を確認するすべなどもない状況でしたし、なにより複数の制作プロセスをチェックすることが負担になっていました。

そういった負担の軽減と進捗状況の見える化を行うために、HerokuへRedmineを運用しようと思い立ちました。

それと、少し前からシナリオの執筆にGitを使いだしてかなり効率的に作業が進んだこともあり、OSSのプロジェクト管理ツールを導入しようと検討していたことも背景の一つにありますねー

#実際のデプロイまで
##ざっくりとした手順
基本的には、こちらの記事に書いてある通りに進めていきます。
[How to deploy Redmine to Heroku
](https://medium.com/mozaix-llc/how-to-deploy-redmine-to-heroku-41684d888b05)

大まかな流れとしては、記事にもあるように、

１：ソースコードを clone
２：gitignore を弄る
３：Gemfile を弄る
４：bundle install & rake generate_secret_token を実行
５：Heroku へデプロイ

といった感じですね。

あと、HerokuへのデプロイにはHerokuアカウントと Heroku CLI を使用します。

Herokuアカウントの作成や Heroku CLI のインストールは、この辺の記事が参考になります。

[Heroku初心者がHello, Herokuをしてみる](https://qiita.com/Arashi/items/b2f2e01259238235e187)

[コマンドでHerokuを操作する Heroku CLI のインストール](http://blog.w-hippo.com/entry/2017/01/29/143550)

##ローカルでの作業

まずは、Redmineのソースコードを clone します。

```
git clone https://github.com/redmine/redmine.git -b 3.4-stable
```

次に、作業ディレクトリを redmine に移します。

```
cd redmine
```

gitignore を編集して、以下のファイル項目を削除します。

```
Gemfile.lock
Gemfile.local
public/plugin_assets 
config/initializers/session_store.rb 
config/initializers/secret_token.rb 
config/configuration.yml 
config/email.yml
```

次に、Gemfile 内の下記の記述をコメントアウト(又は削除)します。

```
database_file = File.join(File.dirname(__FILE__), "config/database.yml")
 if File.exist?(database_file)
   database_config = YAML::load(ERB.new(IO.read(database_file)).result)
   adapters = database_config.values.map {|c| c['adapter']}.compact.uniq
   if adapters.any?
     adapters.each do |adapter|
       case adapter
       when 'mysql2'
         gem "mysql2", "~> 0.4.6", :platforms => [:mri, :mingw, :x64_mingw]
       when /postgresql/
         gem "pg", "~> 0.18.1", :platforms => [:mri, :mingw, :x64_mingw]
       when /sqlite3/
         gem "sqlite3", (RUBY_VERSION < "2.0" && RUBY_PLATFORM =~ /mingw/ ? "1.3.12" : "~>1.3.12"),
                        :platforms => [:mri, :mingw, :x64_mingw]
       when /sqlserver/
         gem "tiny_tds", (RUBY_VERSION >= "2.0" ? "~> 1.0.5" : "~> 0.7.0"), :platforms => [:mri, :mingw, :x64_mingw]
         gem "activerecord-sqlserver-adapter", :platforms => [:mri, :mingw, :x64_mingw]
       else
         warn("Unknown database adapter `#{adapter}` found in config/database.yml, use Gemfile.local to load your own database gems")
       end
     end
   else
    warn("No adapter found in config/database.yml, please configure it first")
   end
 else
  warn("Please configure your config/database.yml first")
 end
```

コメントアウト(又は削除)した後に、下記の記述を追加します。
追加するところは先ほどコメントアウト(又は削除)したところです。

```
group :development, :test do
  gem 'sqlite3'
end

group :production do
  gem 'pg', '~> 0.20'
  gem 'rails_12factor'
  gem 'thin' # change this if you want to use other rack web server
end
```

Gemfile の編集が終わったら bundle install を行います。

```
bundle install --without production test rmagick
```

rmagick を除いているのは、単にウチの環境ではコケるためですね。
あと、rmagickをインストールするのが面倒くさかったので……

bundle install が終わった後に、下記のコマンドを実行します。

```
rake generate_secret_token 
```

あとは、Herokuでデプロイするための変更をいくつか加えます。
まずは、config/environment.rb の exit 1 をコメントアウト(又は削除)します。

```raket:config/environment.rb
exit 1
```

次に、config/application.rb 内に以下の記述を追加します。

```raket:config/application.rb
config.assets.initialize_on_precompile = false
```

これで、ローカルでの作業は終わり。

##Herokuへデプロイ

まず、Heroku上にアプリを作成します。

```
heroku apps:create -a APP_NAME
```

次に、Herokuアプリに postgres を追加します。

```
heroku addons:create heroku-postgresql 
```

作成したHerokuアプリとローカルのリポジトリを以下のコマンドで繋ぎます
```
heroku git:remote -a APP_NAME
```

そして、以下のコマンドでHerokuへデプロイします。

```
git add -A
git commit -m “Prepare Redmine for Heroku deployment”
git push heroku 3.4-stable:master
```

最後に、マイグレーションなどを行ってデプロイは終了です。

```
heroku run rake db:migrate
heroku run rake redmine:load_default_data
```

#おわりに

とりあえず、これでHeroku上にRedmineをデプロイできました。

#参考資料
[How to deploy Redmine to Heroku
](https://medium.com/mozaix-llc/how-to-deploy-redmine-to-heroku-41684d888b05)

[Gem::LoadError: Specified 'postgresql' for database adapter, but the gem is not loaded. Add `gem 'pg'` to your Gemfile](https://stackoverflow.com/questions/24755673/gemloaderror-specified-postgresql-for-database-adapter-but-the-gem-is-not)

[Heroku and Rails: Gem Load Error with Postgres, however it is Specified in GEMFILE
](https://stackoverflow.com/questions/39261996/heroku-and-rails-gem-load-error-with-postgres-however-it-is-specified-in-gemfi)

[Heroku初心者がHello, Herokuをしてみる](https://qiita.com/Arashi/items/b2f2e01259238235e187)

[コマンドでHerokuを操作する Heroku CLI のインストール](http://blog.w-hippo.com/entry/2017/01/29/143550)