RailsアプリをHerokuへデプロイするときの手順まとめ
手順簡易まとめ
結構内容とか分かってない部分を理解していきながらやりたいので、簡易の手順だけここにまとめておきます。
rails_12factor
をGemfileに追加- DBのgemを追加
- Rubyのversionを指定
- production環境でprecompileできるか確認
- デプロイ
- 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と呼ばれるようなものを作る過程において、インフラ側におけるベストプラクティス的な意味らしい。
12の要素については、こちら。
この記事は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