RailsアプリをHerokuへデプロイするとき

手順簡易まとめ

結構内容とか分かってない部分を理解していきながらやりたいので、簡易の手順だけここにまとめておきます。

  1. rails_12factorをGemfileに追加
  2. DBのgemを追加
  3. Rubyのversionを指定
  4. production環境でprecompileできるか確認
  5. デプロイ
  6. DBのmigration

Herokuデプロイ

以下の公式Tutorialを参考に。

Rails 4 on Heroku | Heroku Dev Center

Getting Started with Rails 4.x on Heroku | Heroku Dev Center

Logging and asset

Herokuのproduction環境ではログを標準出力にストリームする必要があって、その目的+アセットをproduction環境で提供するためのgemをインストールする必要がある。

# Gemfile
gem "rails_12factor", group: :production

以下rails_12factorのREADMEから抜粋。

Rails gets a lot right when it comes to twelve-factor apps, but it could still be better. The two biggest areas right now are that in production logs should be directed to stdout and dev/prod parity while delivering assets.

This gem enables serving assets in production and setting your logger to standard out, both of which are required to run a Rails 4 application on a twelve-factor provider. The gem also makes the appropriate changes for Rails 3 apps.

ちなみに12factorとは、WebアプリケーションやSoftware as a serviceと呼ばれるようなものを作る過程において、インフラ側におけるベストプラクティス的な意味らしい。

The Twelve-Factor App (日本語訳)

12の要素については、こちら。

qiita.com

この記事はHerokuのCo-founderであるAdam Wigginsが書いた12factorのまとめみたいな感じだけど、モダンなWebアプリケーション開発のインフラ部分において開発者なら必須で知っておきたいことばかり。あとでしっかり復習しよう。

DB

自分はHeroku標準というところでPostgreSQLをdevelopmentとproduction両方で使うことにしました。

gem 'pg'

Ruby version

GemfileでRubyのversionも指定しておきます。

Herokuでは標準だと2.0.0がインストールされるらしいですが明記することを推奨しています。

2015/8/19に2.2.3がリリースされ、その次の日にはHerokuが2.2.3に対応(すさまじい早さ!!!)しましたが、2.2.2のつもりで書いていたので2.2.2で設定しておきます。

ruby '2.2.2'

ですがここによると早めにアップデートした方がよさそう。

確かに、rubygems名前空間のセキュリティの関連だと書いてあったな...。

多分現行のコードで動かない部分とかはないと思うので、そのうち...。

Upgrading a Rails 3 app

Rails 3ならRails 4がローカルで動くようにしないといけないらしい。

4.2を使ってるのでスキップ。

precompileテスト

これなんかいつも何かしらの理由で引っかかってる気がするので、デプロイ前の手順としてやるようにしたい。

SASSのSyntax Errorなどが出ていてdevelop環境で動かしてると検出できないものもあるので、先にコンパイルしてちゃんとできるか試しておく。

$ bin/rake assets:precompile RAILS_ENV=production

HerokuのAsset Pipelineの記事は以下。

Rails 4 Asset Pipeline on Heroku | Heroku Dev Center

Deploying

そしてデプロイ。

$ bundle install
$ git add .;git commit -v
$ git push heroku mybranch:master

そして

heroku logs --tail

とかでログを確認できる。

ここまででdeployは一応完了。

Migrating DB

Heroku上でコマンドを実行するには$ heroku run commandとすればよい。なので

$ heroku run bin/rake db:migrate

でHerokuのサーバー上でmigrationを実行できる。

Dyno

一応稼働してるDynoをひとつだけに設定しておく。(デフォルトはひとつ)

$ heroku ps:scale web=1

以下でdynoを確認できる。

$ heroku ps
=== web (Free): `bin/rails server -p $PORT -e $RAILS_ENV`
web.1: up 2015/08/21 13:40:21 (~ 3m ago)

そしたらアプリがきちんと起動してるか確認してみる。

$ heroku open