HerokuでRedmineをデプロイ（までの長い道のり）

2016/10/10にリリースされた **3.3.1** をHerokuにデプロイして利用できるようにする。
しかしこれがわりとハマるところが多かった…
前例多いけど、わりと環境にも依存するので ~~なかなか一筋縄でいかない感じが（~~

そしてまだ<b><font color="FFF0000">リアルタイム作業中</font></b>だよ！よ！

# そもそもなぜHerokuを選んだか
みなさんいろんな観点で選定すると思うんですよ。
クラウド使う人が多いとは思う。
今回はこういう観点で選定してみまんた。

* 自前でリソース準備しなくても良い<b><font color="#FF0000">（=PaaS含めクラウドのメリット）</font></b>
* 初期構築コストが（IaaSほど）かからない
	- IaaSの場合：OSにも左右されるのでライブラリの依存関係もわりとシビアに考えないといけなかったり
* Ruby、Java、Python、Scalaなど複数言語とフレームワークをサポート
* 基本的な機能は無料枠で利用できる。お財布に優しい
* Gitを使ってデプロイ
	- Gitに慣れているデベロッパはNO学習コスト

# RedmineのDLページ
[Guide » Installation Guide » RedmineInstall » Download]
(http://www.redmine.org/projects/redmine/wiki/Download)

# 3rd-party製のもの
RedmineがバンドルされたVMもある。
* とにかく **Redmine** 使いたいんや（震え声
* **環境構築** 手間かかりすぎｨ!?
* パッケージの **依存関係** 考えるのﾏﾝﾄﾞ！
という諸々の理由により手っ取り早くデプロイしたい場合
こちらを利用するのもあり。

今回はあえてﾏﾝﾄﾞｲ手法を採用します。
そして案の定ﾏﾝﾄﾞかったです。

# Redmineをインストール
先人のお知恵をかなり拝借させていただきました。
[Redmine3.0系をHerokuで動かせるようにする]
(http://qiita.com/KazuyaHara/items/27818ad3e7285cfefde1)

RedmineはRedmineなだけあって、公式もちゃんとRedmine上で書かれてる。
[Guide » Installation Guide » Installing Redmine](http://www.redmine.org/projects/redmine/wiki/redmineinstall)

# Redmineの動作環境
|**Redmine version**|**Supported Ruby versions**|**Rails version used**|
|:-----------|:-----------|:-----------|
|3.3, current trunk|ruby 1.9.3, 2.0.0, 2.1, 2.2, 2.3|Rails 4.2|
|3.2, 3.1|ruby 1.9.3, 2.0.0, 2.1, 2.2|Rails 4.2|


# 各パッケージのアップデート/インストール
当方の環境は **MacOS Sierra** なのでその環境ベースでの手順。
尚、パッケージ管理には **Homebrew** 使用。
## Ruby
```
	> % ruby -v
	ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-darwin15]
```
stable版で2.3.3が出てる。Redmineでもサポートされているのでここでアップデートしてしまう。

```
	-> % brew info ruby
	ruby: stable 2.3.3 (bottled), devel 2.4.0-beta3, HEAD
	Powerful, clean, object-oriented scripting language
	https://www.ruby-lang.org/
	/usr/local/Cellar/ruby/2.3.1_2 (1,261 files, 18.8M) *
	  Poured from bottle on 2016-10-14 at 21:14:58
	From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/ruby.rb
	==> Dependencies
	Build: pkg-config ✔
	Required: libyaml ✔, openssl ✔
	Recommended: readline ✘
	Optional: gdbm ✔, gmp ✘, libffi ✔
	
	・・・　（以下略）　・・・
```


どうせなら上げてしまいたいのでアップデートする。

```
	-> % brew upgrade ruby
	
	・・・　（中略）　・・・
	
	==> Installing ruby
	==> Downloading https://homebrew.bintray.com/bottles/ruby-2.3.3.sierra.bottle.tar.gz
	######################################################################## 100.0%
	==> Pouring ruby-2.3.3.sierra.bottle.tar.gz
	==> Using the sandbox
	==> Caveats
	Emacs Lisp files have been installed to:
	  /usr/local/share/emacs/site-lisp/ruby
	==> Summary
	🍺  /usr/local/Cellar/ruby/2.3.3: 1,263 files, 18.9M
```

**2.3.1 → 2.3.3** へ上がったことを確認

```
	-> % ruby -v
	ruby 2.3.3p222 (2016-11-21 revision 56859) [x86_64-darwin16]
```

## RubyGems（gem）
Rails含め、ruby関連のパッケージ管理用に **RubyGems** を使用（以下gemとする
まずgem本体をアップデートする
<b><font color="FF0000">※ ここは用途・目的に応じてアップデートの要否は自身の判断で</font></b>

```
    -> % gem update --system
	Updating rubygems-update
	Fetching: rubygems-update-2.6.8.gem (100%)
	Successfully installed rubygems-update-2.6.8
```

## Rails - インストール時にまさかのビルドエラー発生
Railsはサポートされてるバージョンが **4.2** であるため、バージョンを指定してインストールしたが、ビルド時にエラー発生。nokogiri怪しい。

```
	-> % gem install rails -v 4.2.0
	ERROR:  Error installing rails:
		ERROR: Failed to build gem native extension.
	
	    current directory: /usr/local/lib/ruby/gems/2.3.0/gems/nokogiri-1.6.8/ext/nokogiri
	/usr/local/opt/ruby/bin/ruby -r ./siteconf20161215-7511-1r17cb1.rb extconf.rb
	Using pkg-config version 1.1.7
	checking if the C compiler accepts ... /usr/local/Cellar/ruby/2.3.3/lib/ruby/2.3.0/mkmf.rb:456:in `try_do': The compiler failed to generate an executable file. (RuntimeError)
	You have to install development tools first.
		from /usr/local/Cellar/ruby/2.3.3/lib/ruby/2.3.0/mkmf.rb:571:in `block in try_compile'
		from /usr/local/Cellar/ruby/2.3.3/lib/ruby/2.3.0/mkmf.rb:522:in `with_werror'
		from /usr/local/Cellar/ruby/2.3.3/lib/ruby/2.3.0/mkmf.rb:571:in `try_compile'
		from extconf.rb:138:in `nokogiri_try_compile'
		from extconf.rb:162:in `block in add_cflags'
		from /usr/local/Cellar/ruby/2.3.3/lib/ruby/2.3.0/mkmf.rb:629:in `with_cflags'
		from extconf.rb:161:in `add_cflags'
		from extconf.rb:414:in `<main>'
	
	To see why this extension failed to compile, please check the mkmf.log which can be found here:
	
	  /usr/local/lib/ruby/gems/2.3.0/extensions/x86_64-darwin-16/2.3.0/nokogiri-1.6.8/mkmf.log
	
	extconf failed, exit code 1
	
	Gem files will remain installed in /usr/local/lib/ruby/gems/2.3.0/gems/nokogiri-1.6.8 for inspection.
	Results logged to /usr/local/lib/ruby/gems/2.3.0/extensions/x86_64-darwin-16/2.3.0/nokogiri-1.6.8/gem_make.out
```

前El Capitanの時はビルドエラーにならなかったので <small>~~（Railsインストール自体は実は以前やってる~~</small>
あれ？と思い、とりあえずログをあさる。

```
	/RubyGems_PATH/2.3.0/extensions/x86_64-darwin-16/2.3.0/nokogiri-1.6.8/mkmf.log
```

このへんが問題っぽい。

```
	xcrun: error: invalid active developer path 
	(/Library/Developer/CommandLineTools), 
	missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun
```

Sierraだとわりと発生してる問題なのかな。
[macOS Sierra: invalid active developer path](http://apple.stackexchange.com/questions/254380/macos-sierra-invalid-active-developer-path)

あと本家にも明記されてる。
[Installing Nokogiri - MacOS X](http://www.nokogiri.org/tutorials/installing_nokogiri.html#mac_os_x)

なのでインストールする。
コマンド実行したらGUIでインストールのポップアップ画面が出てくるので、ウィザードに沿ってインストール。

```
	> % xcode-select --install
	xcode-select: note: install requested for command line developer tools
```
![xcode-select-install 2016-12-15 20-09-15.png](https://qiita-image-store.s3.amazonaws.com/0/73604/e75a6b7c-66cc-5a50-6c5b-3564f0865bfc.png)



からのgemパッケージアップデート

```
	> % gem update
```
で、Railsインストール（--no-ri --no-rdocオプションつけ忘れ
やっと成功したがまだ先は長い。。。

```
	-> % gem install rails -v 4.2.0
	Fetching: rails-4.2.0.gem (100%)
	Successfully installed rails-4.2.0
	Parsing documentation for rails-4.2.0
	Installing ri documentation for rails-4.2.0
	Done installing documentation for rails after 334 seconds
	1 gem installed
```

## Heroku

herokuもここでインストールしておく

```
> % gem install heroku
```


# ここからやっと本題のRedmineの設定へ
とりあえずホームディレクトリに移動
```
    -> % cd ~/
```

ホームディレクトリ配下にRedmineをgit cloneする

```
    -> % git clone https://github.com/redmine/redmine.git
    Cloning into 'redmine'...
    remote: Counting objects: 131947, done.
    remote: Compressing objects: 100% (19/19), done.
    remote: Total 131947 (delta 6), reused 0 (delta 0), pack-reused 131928
    Receiving objects: 100% (131947/131947), 46.56 MiB | 5.01 MiB/s, done.
    Resolving deltas: 100% (100519/100519), done.
    Checking connectivity... done.
```

## Redmine - バージョン確認
取得してきたRedmineのバージョンを確認する。
3.3.1だから現時点の最新のバージョン。

```ruby:version.rb
	module Redmine
	  module VERSION #:nodoc:
	    MAJOR = 3
	    MINOR = 3
	    TINY  = 1
```

ディレクトリを移動する

```
    -> % cd redmine
``` 
 

各種設定はこちらを参考に。
[HerokuにRedmineをデプロイする方法](http://qiita.com/ihatov08/items/a4e7b299486b90bd170a)



# Herokuの設定
herokuコマンドで設定する。
## 
デプロイ用のスペース（=アプリ名）を作成

```
	-> % heroku create redmine-XXX
	Creating ⬢ redmine-XXX... done
	https://redmine-XXX.herokuapp.com/ | https://git.heroku.com/redmine-XXX.git
```

## gitでローカルにコミットする
```
	-> % git status
	On branch master
	Your branch is up-to-date with 'origin/master'.
	Changes to be committed:
	  (use "git reset HEAD <file>..." to unstage)
	
		modified:   .gitignore
		modified:   Gemfile
		new file:   Gemfile.lock
		renamed:    config/database.yml.example -> config/_database.yml.example
		modified:   config/application.rb
		modified:   config/environments/production.rb
		
	> % git commit -am "[add]redmine deploy"
	[master 7f3bd7dea] [add]redmine deploy
	 6 files changed, 229 insertions(+), 39 deletions(-)
	 create mode 100644 Gemfile.lock
	 rename config/{database.yml.example => _database.yml.example} (100%)
```

## HerokuにPush → エラー発生
nonexistent database だからDBがなくてrejectされたっぽかったので

```
	remote:        Tasks: TOP => environment
	remote:        (See full trace by running task with --trace)
	remote:  !
	remote:  !     Precompiling assets failed.
	remote:  !     Attempted to access a nonexistent database:
	remote:  !     https://devcenter.heroku.com/articles/pre-provision-database
	remote:  !
	remote:  !     Push rejected, failed to compile Ruby app.
	remote:
	remote:  !     Push failed
	remote: Verifying deploy....
	remote:
	remote: !	Push rejected to redmine-XXX.
```

[Heroku Postgresアドオン](https://elements.heroku.com/addons/heroku-postgresql)を追加。


```
	-> % heroku addons:add heroku-postgresql
	Creating heroku-postgresql on ⬢ redmine-XXX... free
	Database has been created and is available
	 ! This database is empty. If upgrading, you can transfer
	 ! data from another database with pg:copy
	Created postgresql-tetrahedral-60883 as DATABASE_URL
	Use heroku addons:docs heroku-postgresql to view documentation
```

## Herokuに再度Push → それでもエラー
Gemfile見直さないと。。。

```
	remote:        Gem::LoadError: Specified 'postgresql' for database adapter, but the gem is not loaded. Add `gem 'pg'` to your Gemfile (and ensure its version is at the minimum required by ActiveRecord).
	remote:        Gem::LoadError: pg is not part of the bundle. Add it to Gemfile.
```

後半につづく