Rails4のアプリケーションを Heroku へデプロイする手順（簡易版）


デモとかプロトタイプとか、ちょっとしたツールを Ruby on Rails で作って Heroku へアップしたら捗るかなあと思い、やってみました。
クラウドなら AWS でもいいのですが、microのECインスタンスでも多少はお金がかかるし、ミドルウェアの設定とかも面倒なので。

Heroku も無料枠を越えるとお金がかかってしまうので注意が必要ですが、とても簡単にデプロイできたので、今後はこれを活用しようと思いました。

### 前提

- 手元の OS：`Mac OS X 10.9.5 (Mavericks)`
- Ruby：`2.1.2`
- Rails：`4.1.1`

> - Bundler の環境も手元にあるものとします。
> - Heroku へデプロイする為に Git も必要です。

# Heroku の準備

### 1. アカウント作成

- ここから ⇒ https://www.heroku.com/
	- メールアドレス認証あり〼
	- パスワードは今後、コマンドラインから何度も打つので、覚えやすいものがいいかも。ダッシュボードからいつでも変えれるけど。

### 2. heroku toolbelt（コマンドラインツール）の導入

- ここからインストーラをダウンロード
	- https://toolbelt.heroku.com/

### 3. 動作確認

とりあえず Heroku 側で用意された Sheed(雛型) を使って動作確認します。

- Heroku にコマンドラインからログイン

	```shell:
	$ heroku login
	```

	- 登録時の ID/PASS を入力します。
	- ssh鍵の設定をします。
		- 既存の鍵を利用するならOSの `~/.ssh` ディレクトリ配下に秘密鍵を置いておくこと。
		- 既存の鍵を使わないなら新規に作成する。

- Sheed を Git クローン ＆ Heroku へデプロイ

	```shell:
	$ git clone https://github.com/heroku/ruby-getting-started.git
	$ cd ruby-getting-started
	$ heroku create
	$ git push heroku master
	$ heroku open
	```

	> 上記 `$heroku create` で新しい Herokuアプリケーション領域がクラウド上に用意(IDは適当に払い出される)され、更に `git remote add` 相当のこともされるようです。

- ブラウザが自動で起動し、次のように表示されればOK。

	![RubyGettingStarted.png](https://qiita-image-store.s3.amazonaws.com/0/35733/10fae81b-431f-ea5d-cc11-e96f7f11e084.png "RubyGettingStarted.png")

> heroku コマンドがエラーになるときは、プラットフォーム自体がエラーになっている可能性があります。こちらで状態を確認することができます。
> ⇒ https://status.heroku.com/

> プラットフォーム側で作成済みの Herokuアプリケーションを利用する場合は `$heroku git:remote -a アプリケーション` としてリモートを追加すればいいです。

### ほか

- Heroku が用意しているドキュメント以外で参考にしたもの。
	- [初心者でも15分で公開できるHerokuのはじめかた](http://developers.mobage.jp/blog/how-to-use-for-beginners-heroku)
		- mobage プラットフォーム用の資料のようですが、図つきで参考になります。

# 手元の Rails アプリケーションを Heroku へデプロイ

## ローカルの環境構築

### 1. 適当な Rails アプリケーションの作成

```shell:
$ bundle exec rails new hoge_app --skip-bundle -T
```

> 個人的に、テストは後々、Rspec を使いたいので `-T` を指定しています。

## 2. Gemfileの編集

- Heroku 上でも同じバージョンの Ruby を利用するために、バージョンを明記します。
- Heroku では データベースは PostgreSQL を使います。
	- Mac 側は PostgreSQL のセットアップは面倒なので、そのまま SQLite を利用。
	- Heroku の有料？アドインを使うと、MySQL とかもいけるらしい。

```ruby:rails_angular_app/Gemfile
#..

ruby '2.1.2'

gem 'sqlite3', group: :development
gem 'pg', group: :production
gem 'rails_12factor', group: :production

#..
```

> `config/database.yml` 等で PostgreSQL の接続設定が必要と思いきや、不要らしい。Heroku がよしなにやってくれるみたい。まあ クラウドだからそんなものなのでしょうか。なので、接続ID/PASS も設定が不要。

### 3. Bundler で gem をインストール

```shell:
$ cd hoge_app
$ bundle install --path vendor/bundle --without production
```

> gemファイルを、ローカルの hoge_app/vendor/bundle へインストールしています（好みに応じて変更してください）
> このパスに寄らず、Heroku へデプロイされる際は vendor/bundle にインストールされるようです。
>
> **参考：Heroku へデプロイした時のログ**
> ![スクリーンショット 2014-10-12 23.05.54.png](https://qiita-image-store.s3.amazonaws.com/0/35733/38201bf8-7d44-aa39-9ca6-bf4d73681df1.png "スクリーンショット 2014-10-12 23.05.54.png")

## 4. とりあえず適当に Scaffold

```shell:
$ ./bin/rails g scaffold person name:string age:integer memo:text
$ ./bin/rake db:migrate
```

TOPページを Scaffold で生成されたページに変更します。

```ruby:config/routes.rb
#..

root 'people#index'

#..
```

## 5. ローカルでの動作確認

```shell:
$ cd hoge_app
$ ./bin/rails s
```

ブラウザで `http://127.0.0.1:3000` にアクセス。

![screen4.png](https://qiita-image-store.s3.amazonaws.com/0/35733/6e46ac70-baf0-44a0-f81f-2a275216e676.png "screen4.png")

## Heroku へデプロイ

### 1. Git(ローカル)にコミット

- ローカルの gem ファイル郡 は Git管理下から外しておく。
	- ほかにも除外したいものがあればここへ追記する。

	```:.gitignore
	〜

	vendor/bundle

	〜
	```

- ローカルにコミットする。

	```shell:
	$ cd hoge_app
	$ git init
	$ git add .
	$ git commit -m "first commit"
	```

### 2. Heroku へ push

```shell:
$ cd hoge_app
$ heroku create
$ git push heroku master
```

> ![スクリーンショット 2014-10-12 23.05.54.png](https://qiita-image-store.s3.amazonaws.com/0/35733/38201bf8-7d44-aa39-9ca6-bf4d73681df1.png "スクリーンショット 2014-10-12 23.05.54.png")

### 3. Heroku 上の DBマイグレートを実行

```shell:
$ heroku run rake db:migrate
```

### 4. Heroku の動作確認

```shell:
$ heroku open
```

自動的にブラウザが立ち上がる。

![screen3.png](https://qiita-image-store.s3.amazonaws.com/0/35733/34b92263-1147-85bd-3492-765b16f3f958.png "screen3.png")

以上で完了！

### ほか

- 参考にしたもの
	- [Rails Girls Guides | Heroku に Rails アプリをアップ](http://railsgirls.jp/heroku/)

# おわりに

最初は Heroku の使い方がよく分らなかったのですが、やってみたら以外に簡単にできました^^

また、Heroku のダッシュボードでアプリケーションの状態を確認できるので、何かあればここを見ればいいです。
アプリーケーションのID（= URL）も、ここで変えれるみたい。

![screen1.png](https://qiita-image-store.s3.amazonaws.com/0/35733/2d2870ae-fe93-2dcb-c8d7-3b4ffef5e06d.png "screen1.png")