この記事は
ローカルで作成したRailsアプリをHerokuへデプロイし、SSL化する手順をまとめた記事です。
想定する状態
- Railsアプリをローカルで作成済み
- ソースコードをGitHubにプッシュ済み
ゴール
- RailsアプリをHeroku上で表示できる
- SSL化(https://...)されている
環境
- Ruby 2.5.7
- Rails 5.2.3
手順
1. Herokuに新規登録する
以下のHeroku公式サイトから、新規登録(無料)を行います(画面右上)。
Heroku: Cloud Application Platform

基本は指示に従っていけば登録できますが、詳しい手順が知りたい方は以下のサイトを参考にしてみてください。
https://www.sejuku.net/blog/8178
2. Heroku用のデータベースをインストールする
HerokuではPostgreSQLというデータベースを使用します。
開発環境でもPostgreSQLを使用している場合はこの章は不要なのですが、sqlite3やMySQLなどを使っている場合はHeroku用にPostgreSQLを用意する必要があります。
2-1. Gemfile書き換え
例えば開発環境ではsqlite3を使っていた場合、Gemfileを次のように書き換えます。
group :development, :test do # 開発環境、テスト環境
gem 'sqlite3' # sqlite3
end
group :production do # 本番環境
gem 'pg' # PostgreSQL
end
2-2. gemのインストール
書き換えたGemfileを反映するため、bundle installします。
$ bundle install
2-3. config/database.ymlの書き換え
データベースの設定ファイルを、次のように書き換えます。
# 変更前
production:
<<: *default
database: db/production.sqlite3
# 変更後
production:
<<: *default
adapter: postgresql
encoding: unicode
pool: 5
3. Herokuへログインする
ターミナルで次のコマンドを打ち込みます。
$ heroku login
# => heroku: Press any key to open up the browser to login or q to exit: # Enterする
するとブラウザで次の画面が開きます。

画面からログイン処理を行うと、ログインが成功します。
ターミナルにも次のように表示されます。
Logging in... done
Logged in as <登録したメールアドレス>
4. Heroku上でアプリ作成
サービス名(サイト名)を決めて、次のコマンドを実行します。
heroku create <サービス名>
# => Creating ⬢ <サービス名>... done
# https://<サービス名>.herokuapp.com/ | https://git.heroku.com/<サービス名>.git
無事アプリが作られていれば、https://<サービス名>.herokuapp.com/にアクセスすると次のようになっているはずです。
5. Herokuへソースコードをプッシュ
さあ、いよいよHerokuにソースコードをアップしていきます(ソースコードがGitHubで管理されていることが前提です)。
次のコマンドを打ち込んでください。
$ git push heroku master
...
# remote: Verifying deploy... done.
# To https://git.heroku.com/<サービス名>.git
# * [new branch] master -> master
上のように、deploy doneになれば成功です。
この状態で先ほどの画面をURLをリロードすると、次のように表示が変わっているはずです。
正常に表示されていないのは、まだHeroku上のデータベースが更新されていない(マイグレーションが行われていない)ことが原因です。
なので次のコマンドを打ってください。
$ heroku run rake db:migrate
これがうまくいけば、先ほどのURLで無事トップページが表示されているはずです。
6. SSL化
ここまで来ればもう一息です。
最後にHerokuページをSSL化します...といっても、実はURLを見るとわかるように既にSSL化されています。
これはHerokuが気を利かせてくれたおかげなのですが、アプリ側でもより安全な設定に変更しておきましょう。
6-1. production.rbの修正
本番環境ではSSLを強制するように設定を修正します。
Rails.application.configure do
.
.
config.force_ssl = true # コメントアウトを外す
.
.
end
6-2. WebサーバーはPumaを使う
HerokuではデフォルトでWEBrickというWebサーバを使っていますが、高トラフィックを捌くのには不向きで本番環境において適切なサーバではありません。
そこで、代わりにPumaを使うことにします。
本番環境のWebサーバー設定ファイルとして、以下を修正します。
※詳しく知りたい方はHerokuのPumaのドキュメントを参照してください。
workers Integer(ENV['WEB_CONCURRENCY'] || 2)
threads_count = Integer(ENV['RAILS_MAX_THREADS'] || 5)
threads threads_count, threads_count
preload_app!
rackup DefaultRackup
port ENV['PORT'] || 3000
environment ENV['RACK_ENV'] || 'development'
on_worker_boot do
# Worker specific setup for Rails 4.1+
# See: https://devcenter.heroku.com/articles/
# deploying-rails-applications-with-the-puma-web-server#on-worker-boot
ActiveRecord::Base.establish_connection
end
最後にProcfileをルートディレクトリの直下(Gemfileと同じ階層)に作成します。
これは、Heroku上でPumaを走らせるための設定ファイルになります。
web: bundle exec puma -C config/puma.rb
以上で設定は完了です。
お疲れ様でした!
参考
heroku公式ページ(https://devcenter.heroku.com/articles/heroku-cli)
Railsチュートリアル(https://railstutorial.jp/)
挫折した人必見!HerokuでRailsアプリを公開する方法(https://www.sejuku.net/blog/8178)