LoginSignup
16
29

More than 3 years have passed since last update.

RailsアプリをHerokuへデプロイ&SSL化する

Last updated at Posted at 2020-03-08

この記事は

ローカルで作成したRailsアプリをHerokuへデプロイし、SSL化する手順をまとめた記事です。

想定する状態

  • Railsアプリをローカルで作成済み
  • ソースコードをGitHubにプッシュ済み

ゴール

  • RailsアプリをHeroku上で表示できる
  • SSL化(https://...)されている

スクリーンショット_2020-03-08_15_39_25.jpg

環境

  • Ruby 2.5.7
  • Rails 5.2.3

手順

1. Herokuに新規登録する

以下のHeroku公式サイトから、新規登録(無料)を行います(画面右上)。
Heroku: Cloud Application Platform

スクリーンショット_2020-03-08_15_03_55.jpg

基本は指示に従っていけば登録できますが、詳しい手順が知りたい方は以下のサイトを参考にしてみてください。

https://www.sejuku.net/blog/8178

2. Heroku用のデータベースをインストールする

HerokuではPostgreSQLというデータベースを使用します。
開発環境でもPostgreSQLを使用している場合はこの章は不要なのですが、sqlite3やMySQLなどを使っている場合はHeroku用にPostgreSQLを用意する必要があります。

2-1. Gemfile書き換え

例えば開発環境ではsqlite3を使っていた場合、Gemfileを次のように書き換えます。

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する

するとブラウザで次の画面が開きます。

スクリーンショット_2020-03-08_15_03_55.jpg

画面からログイン処理を行うと、ログインが成功します。
ターミナルにも次のように表示されます。

Logging in... done
Logged in as <登録したメールアドレス>

4. Heroku上でアプリ作成

サービス名(サイト名)を決めて、次のコマンドを実行します。

heroku create <サービス名>
#=> Creating ⬢ <サービス名>... done
#    https://<サービス名>.herokuapp.com/ | https://git.heroku.com/<サービス名>.git

無事アプリが作られていれば、https://<サービス名>.herokuapp.com/にアクセスすると次のようになっているはずです。
スクリーンショット 2020-03-08 9.28.15.png

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をリロードすると、次のように表示が変わっているはずです。

スクリーンショット 2020-03-08 9.30.42.png

正常に表示されていないのは、まだHeroku上のデータベースが更新されていない(マイグレーションが行われていない)ことが原因です。
なので次のコマンドを打ってください。

$ heroku run rake db:migrate

これがうまくいけば、先ほどのURLで無事トップページが表示されているはずです。

スクリーンショット_2020-03-08_15_39_25.jpg

6. SSL化

ここまで来ればもう一息です。
最後にHerokuページをSSL化します...といっても、実はURLを見るとわかるように既にSSL化されています。
これはHerokuが気を利かせてくれたおかげなのですが、アプリ側でもより安全な設定に変更しておきましょう。

6-1. production.rbの修正

本番環境ではSSLを強制するように設定を修正します。

config/environments/production.rb
Rails.application.configure do
  .
  .
  config.force_ssl = true  # コメントアウトを外す
  .
  .
end

6-2. WebサーバーはPumaを使う

HerokuではデフォルトでWEBrickというWebサーバを使っていますが、高トラフィックを捌くのには不向きで本番環境において適切なサーバではありません。
そこで、代わりにPumaを使うことにします。

本番環境のWebサーバー設定ファイルとして、以下を修正します。
※詳しく知りたい方はHerokuのPumaのドキュメントを参照してください。

config/puma.rb
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を走らせるための設定ファイルになります。

Procfile
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)

16
29
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
29