makoto's TECH

私の備忘録

【Rails】HerokuにHTTPSでデプロイしDBにMySQL2を設定する

概要

RailsアプリをHerokuにHTTPSでデプロイし、MySQL2を使えるようにします。

Herokuとは

Webアプリケーションの開発から実行、運用までをクラウド上で完結できるサービス(PaaS)のひとつです。

IaaS、PaaS、SaaSの違いを整理して、クラウドサービスの特徴を知ろう | ニフクラ

HTTPSとは

暗号化したHTTP通信のことです。暗号化することによって、第三者からの盗聴・改竄・なりすましを防ぐことができます。暗号化にはSSL/TLSプロトコルを利用しています。

SSL/TLSってなんだろう?|SSL/TLS-総合解説サイト

MySQLとは

オープンソースで提供されているリレーショナルデータベースマネジメントシステム(RDBMS)のひとつです。

PostgreSQLとMySQL、使うならどっち? データベース専門家が8つの視点で徹底比較! - エンジニアHub|若手Webエンジニアのキャリアを考える!

作業

Rails

各種設定

config/environments/production.rbの編集

config.force_ssl = true # コメントアウトを外す

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の作成・編集

web: bundle exec puma -C config/puma.rb

Heroku

DBにMySQLを使用するためにはクレジットカードの登録が必要です。

Herokuのインストール

既にインストールしているの場合は不要です。

https://jp.heroku.com/

ターミナル

$ brew tap heroku/brew && brew install heroku # Herokuのインストール

ターミナル

To use the Heroku CLI's autocomplete --
  Via homebrew's shell completion:
    1) Follow homebrew's install instructions https://docs.brew.sh/Shell-Completion
        NOTE: For zsh, as the instructions mention, be sure compinit is autoloaded
              and called, either explicitly or via a framework like oh-my-zsh.
    2) Then run
      $ heroku autocomplete --refresh-cache

  OR

  Use our standalone setup:
    1) Run and follow the install steps:
      $ heroku autocomplete

Bash completion has been installed to:
  /usr/local/etc/bash_completion.d

zsh completions have been installed to:
  /usr/local/share/zsh/site-functions

このような画面が出ればインストールは完了です。

URLの作成

ターミナル

$ heroku login # Herokuにログイン
$ cd # デプロイしたいアプリのディレクトリに移動
$ heroku create <アプリ名> # URLの生成
Creating ⬢ <アプリ名>... done
https://<アプリ名>.herokuapp.com/ | https://git.heroku.com/<アプリ名>.git

使用するDBをMySQL2に設定

ターミナル

$ heroku addons:create cleardb:ignite # DBの追加
$ heroku config # Herokuの設定の確認
=== <アプリ名> Config Vars
CLEARDB_DATABASE_URL: mysql://〜
$ heroku config:set CLEARDB_DATABASE_URL=mysql2://〜 # CLEARDB_DATABASE_URLをmysqlからmysql2に変更
Setting CLEARDB_DATABASE_URL and restarting ⬢ <アプリ名>... done, v5
CLEARDB_DATABASE_URL: mysql2://〜

使用するDBをPostgreSQLからMySQL2に変更

ターミナル

$ heroku addons:destroy heroku-postgresql -a <アプリ名> # postgresqlを削除
 ▸    WARNING: Destructive Action
 ▸    This command will affect the app <アプリ名>
 ▸    To proceed, type <アプリ名> or re-run this command with --confirm <アプリ名>

> <アプリ名> # 削除には入力が求められるので入力
Destroying postgresql-triangular-69120 on ⬢ <アプリ名>... done
$ heroku config:set DATABASE_URL=mysql2://〜 # DATABASE_URLにmysql2を設定

Herokuへデプロイ

ターミナル

$ git push heroku master

参考

railstutorial.jp

qiita.com

qiita.com

所感

PostgreSQLからMySQLに変更したら、サイトの読み込みが早くなった気がします。