Ruby on Rails for Heroku

# Rails対応
## アプリケーションの作成
```bash
rails new <name> -d postgresql
```

>Railsではデフォルトでデータベースに**sqlite3**を使用するが、
Herokuではデフォルトで**postgresql**を使用するため、
アプリケーションの作成時に**postgresql**を指定しておく。

>[参考サイト]
[Railsドキュメント](http://railsdoc.com/rails)

## Gemfileにgemを追加し、bundle install
```rb:Gemfile
gem 'rails_12factor', group: :production
```
```bash:shell
bundle install
```
>Railsではデフォルトでログ出力先が標準出力になっているが、
Herokuではデフォルトでログ出力に**logplex**を使用しており、
標準出力にログが表示されない。

>そのため、heroku logsコマンド実行時にRailsのログが表示されず、
heroku logsコマンドを使用した調査が行えないため、
Heroku環境(**production**)でだけ**rails_12factor**を使用するように指定する。

>[参考サイト]
[Herokuでアプリケーションのログを出力する](http://qiita.com/icb54615/items/209ab6dc646bfc7f9432)

## Procfileの追加
```:Procfile
web: bundle exec rails server -p $PORT
```
>HerokuでWebサーバーをデフォルトの**WEBrick**で動作させる場合は特になくても問題ない。

>ただし、git push heroku master実行時に"Procfileが存在しないため、WEBrickを使用する"というWARNINGメッセージが毎回表示される。
また、後述する**WEBrick**以外のWebサーバーを使用する場合は必要になる。

## Webサーバーの変更
### 1. thin
```rb:Gemfile
gem "thin"
```
```bash:shell
bundle install
```
```bash:Webサーバー起動
rails server thin
```
```:Procfile
web: bundle exec rails server thin -p $PORT
```
>[参考サイト]
[Herokuのwebサーバをthinに変更する](http://edywrite.blogspot.jp/2012/08/herokuwebthin.html)

### 2. puma
```rb:Gemfile
gem "puma"
```
```bash:shell
bundle install
```
```bash:Webサーバー起動
rails server puma
```
```:Procfile
web: bundle exec rails server puma -p $PORT
```
>[参考サイト]
[pumaを使ってみた](http://qiita.com/kompiro/items/223bb04c2f009787eea8)

# Heroku対応
## アカウント作成＆SSHキーの登録
>[Heroku公式サイト](https://www.heroku.com)からアカウント作成とSSHキーの登録を行う

>[参考サイト]
[Heroku導入メモ](https://gist.github.com/konitter/5370904)
[初心者でも15分で公開できるHerokuのはじめかた](http://developers.mobage.jp/blog/how-to-use-for-beginners-heroku)

## ログイン
```bash
heroku login
```
>アカウント作成時に設定したメールアドレスとパスワードを入力

## アプリケーションの作成
### 1. [Heroku公式サイト](https://www.heroku.com)の[ダッシュボード](https://dashboard.heroku.com/apps)から行う場合
#### 1-1. ダッシュボードからアプリを作成

#### 1-2. RailsとHerokuの紐付け
Herokuダッシュボード上のアプリの設定画面に表示されている**Git URL**を
RailsアプリケーションのGitリモートリポジトリに**heroku**として追加

```bash
git remote add heroku <HerokuアプリケーションのGit URL>
```

### 2. コマンドから行う場合
```bash
heroku create <name>
```
>heroku createコマンドでアプリケーションを作成する場合、
自動でHerokuのリモートリポジトリが追加される

## Herokuにデプロイ
```bash
git push heroku master
```

## 確認
```bash
heroku open
```
>Webブラウザが開き、自分のアプリケーションのページが表示されたら、成功

## エラー
### We're sorry, but something went wrong. が表示された場合
#### 1. ログを確認
```bash
heroku logs
```
>表示されたログから原因を特定し、修正

## Heroku上の環境でコマンドをリモート実行
```bash
heroku run <command>
```
>heroku run ruby -vとすることで、Heroku上でruby -vコマンドをリモート実行できる

## Heroku上のWebプロセスの状態確認＆再起動
```bash:プロセスの状態確認
heroku ps
heroku ps:scale web=1
```
```bash:再起動
heroku restart
```
>[参考サイト]
[Herokuでウェブプロセスが止まる](http://qiita.com/isora1988/items/5d16b02adc88681d92c1)

## buildpackを追加
```bash
heroku buildpacks:add <Githubなどで公開されているbuildpackのURL>
```
>gemとして提供されていないバイナリを使用したい時に
buildpack形式で公開されているURLを指定することで、
デプロイ時にHeroku環境に対象のバイナリをインストールできる。

>[参考サイト]
[Buildpacks](https://devcenter.heroku.com/articles/buildpacks)

## メンテナンス
```bash:メンテナンス開始
heroku maintenance:on
```

```bash:メンテナンス終了
heroku maintenance:off
```

```bash:メンテナンスページを自分で用意したページに変更
heroku config:set MAINTENANCE_PAGE_URL=<URL>
```

>Railsアプリケーションで生成したページをメンテナンスページとして表示する場合、
Railsのデフォルト設定ではiframeに表示できない設定になっているため、
config/application.rbに以下の設定が必要になる

```rb:config/application.rb
class Application < Rails::Application
  config.action_dispatch.default_headers.delete( "X-Frame-Options" )
end
```

>[参考サイト]
[Rails4アプリがiframeで表示されない](http://blog.bungu-do.jp/archives/4646)