インターネットのスケッチ

Done is better than perfect.

HerokuにRailsアプリの検証環境を立てる

開発中他の人に動作を確認してもらいたいときや、スマホ実機確認をするとき用に、Herokuに検証環境を作りました。

ちなみにステージング兼本番環境にはAWSを使う予定です。

環境

Herokuのアカウント新規登録

こちらから。 jp.heroku.com

Heroku CLIのインストール&SSHキーの登録

ターミナルなどでherokuコマンドを使えるようにCLIをインストールします。私はhomebrewで入れました。 devcenter.heroku.com

インストールできたらHerokuにログインして、SSHキーを登録します。

SSHキーの作成

$ ssh-keygen -t rsa -b 4096 -C "Herokuで使うメールアドレス"

キーの保存先はユーザーディレクトリの .ssh/id_heroku_rsa など パスフレーズも入力

Herokuにログインしてキー登録

$ heroku login

Enter your Heroku credentials:
Email: メールアドレス
Password: *************
Logged in as メールアドレス

$ heroku keys:add ~/.ssh/id_heroku_rsa.pub

heroku keys:add で引数を指定しなければデフォルトで ~/.ssh/id_rsa.pub か ~/.ssh/id_dsa.pub を探しに行くらしい。

アプリをHerokuにデプロイ

準備

アプリのディレクトリをどこかにまるごとコピーして以下のファイルを削除するか、ディレクト外に移動。

  • Dockerfile
  • docker-compose.yml
  • .git
  • .gitignore
  • .env

私はDockerで開発していてそのままHerokuに上げてもいいんですが、Dockerなしでデプロイする方法も知っておきたいので、今回はDocker関連のファイルは除去して上げました。

そしたらHerokuへのデプロイはgitを経由して行うので、 git init をしてもう一度gitの管理対象にします。

$ cd コピーしたアプリのディレクトリ
$ git init
$ git add .
$ git commit -m "feat: Initial commit"

デプロイ

コピーしたアプリのディレクトリにいる状態で、herokuコマンドでデプロイします。

// Herokuにアプリを作成する
$ heroku create アプリの名前

// デプロイ
$ git push heroku master

MySQLの設定

// MySQLを利用するためClearDBアドオンを入れる
$ heroku addons:create cleardb:ignite

Creating cleardb:ignite on ⬢ アプリ名... free
Created cleardb-cylindrical-85040 as CLEARDB_DATABASE_URL
Use heroku addons:docs cleardb to view documentation

// 設定確認
$ heroku config

=== アプリ名 Config Vars
CLEARDB_DATABASE_URL:     mysql://b2a3d6180457c6:be3c12f5@us-cdbr-iron-east-04.cleardb.net/heroku_b44817e2b39c626?reconnect=true
LANG:                     en_US.UTF-8
RACK_ENV:                 production
RAILS_ENV:                production
RAILS_LOG_TO_STDOUT:      enabled
RAILS_SERVE_STATIC_FILES: enabled
SECRET_KEY_BASE: ***

// RailsのGemの mysql2 に合わせてDBURLを追加 or 変更する。
$ heroku config:set DATABASE_URL=mysql2://b2a3d6180457c6:be3c12f5@us-cdbr-iron-east-04.cleardb.net/heroku_b44817e2b39c626?reconnect=true

Setting DATABASE_URL and restarting ⬢ アプリ名... done, v9
DATABASE_URL: mysql2://b2a3d6180457c6:be3c12f5@us-cdbr-iron-east-04.cleardb.net/heroku_b44817e2b39c626?reconnect=true

// 設定確認
$ heroku config

=== アプリ名 Config Vars
CLEARDB_DATABASE_URL:     mysql://b2a3d6180457c6:be3c12f5@us-cdbr-iron-east-04.cleardb.net/heroku_b44817e2b39c626?reconnect=true
DATABASE_URL:             mysql2://b2a3d6180457c6:be3c12f5@us-cdbr-iron-east-04.cleardb.net/heroku_b44817e2b39c626?reconnect=true
〜省略〜

ちなみにDATABASE_URLをセットするところで、「zsh: no matches found: DATABASE_URL=mysql2: 省略」というエラーが私は出ました。zshのエラーのようなので.zshrcに以下を追記したら通りました。

$ setopt nonomatch

// 変更を反映
$ source ~/.zshrc

shirusu-ni-tarazu.hatenablog.jp

環境変数の設定

環境変数はHerokuのサイトからか、コマンドで設定できます。
サイトからは アプリのダッシュボード>Settings>Config Vars
コマンドは以下

// heroku config:add 変数名="値" の形式
$ heroku config:add DB_NAME="DB名"
$ heroku config:add DB_USERNAME="DBユーザー名"
$ heroku config:add DB_PASSWORD="パスワード"

ここには書きませんが、ついでにベーシック認証の変数なども設定しました。

テーブルの作成

あとはマイグレーションをしてテーブルを作成するだけです。

$ heroku run rails db:migrate

作成できたらアクセスできるか確認します。
下のコマンドのWeb URLがアプリのURLです。ちゃんとアクセスできたらOKです。

// アプリの情報を見る
$ heroku apps:info
=== アプリ名
Addons:         cleardb:ignite
Auto Cert Mgmt: false
Dynos:          web: 1
Git URL:        https://git.heroku.com/アプリ名.git
Owner:          メールアドレス
Region:         us
Repo Size:      16 MB
Slug Size:      64 MB
Stack:          heroku-16
Web URL:        https://アプリ名.herokuapp.com/

まとめ

あとは機能の実装ができたら git add してHerokuにプッシュしていけば検証環境でサイトの動作をチェックできます。デプロイツールいれたい。


参考

ステージング環境とは?開発環境、検証環境との違いと役割 | WWWクリエイターズ

お前らのSSH Keysの作り方は間違っている - Qiita

Managing Your SSH Keys | Heroku Dev Center

Rails5 x MySQL を Herokuにデプロイする手順 | tackeyy.com

mysqlを使ったRailsアプリをHerokuにデプロイする流れ - Qiita

HerokuでMySQLを使おうとして詰まったところ - Qiita

Heroku データベースの管理(ClearDB アドオンによる MySQL の利用) - 君の瞳はまるでルビー - Ruby 関連まとめサイト

Herokuで本番環境の環境変数(config vars)を.envファイルで設定する - dackdive's blog