LoginSignup
6
3

More than 1 year has passed since last update.

Rails API + MYSQLでherokuにデプロイする流れ

Last updated at Posted at 2021-06-12

RailsのAPIとMySQLで作ったアプリを初めてherokuにデプロイする過程でハマったところがあるので、記録として書いておこうと思います。初心者なので至らぬ箇所もあるかとは思いますがご容赦下さい。

環境

・Windows10
・Ruby 2.6.6
・Rails 6.1.3
・MySQL2 0.5
・heroku

前提

  • herokuアカウント登録済
  • heroku CLIインストール済(インストールはこちらから
  • herokuクレジットカード登録済み(clearDB使うため。無料)

デプロイするソースをコミット

# デプロイするアプリのディレクトリに移動
$ cd ~
# 初期化
$ git init
# ディレクトリ以下のファイルを選択
$ git add --all
# コミット
$ git commit -m "first commit"

herokuにログイン、新規app作成

下記コマンドでブラウザからログインします

$ heroku login

デプロイするアプリのディレクトリでapp作成します。

$ heroku app:create <appの名前>

これによりアプリの公開URLがhttps://(appの名前).herokuapp.comとなります。
ちなみにアンダーバーが使えないようです。

リモートリポジトリの確認

$ git remote -v
  • リモートリポジトリheroku https://git.heroku.com/(appの名前).gitが作成されているのを確認
  • git initでローカルリポジトリを作成してからheroku createしたので、リモートリポジトリは自動で追加されます

DBの設定

herokuのDBはデフォルトでPostgreSQLなので、MySQLを使う場合手動で設定する必要があります
下記コマンドで作成

$ heroku addons:create cleardb:ignite
  • ignite(無料プラン)でherokuでMySQLが使えるcleardbを利用
  • 本人確認のためにクレジットカードをherokuに登録する必要があります。
  • https://heroku.com/verify から登録できます。
    ※こちらが英語での住所変換に便利でした。http://judress.tsukuenoue.com/

DBの環境設定

cleardbのURLを確認します。

$ heroku config

次が確認できます。

CLEARDB_DATABASE_URL: mysql://<ユーザー名>:<パスワード>@<ホスト名>/<データベース名>?reconnect=true

このURLの情報をもとに各変数を設定します。

$ heroku config:add DB_NAME='<データベース名>'
$ heroku config:add DB_USERNAME='<ユーザー名>'
$ heroku config:add DB_PASSWORD='<パスワード>'
$ heroku config:add DB_HOSTNAME='<ホスト名>'
$ heroku config:add DB_PORT='3306'
$ heroku config:add DATABASE_URL='mysql2://<ユーザー名>:<パスワード>@<ホスト名>/<データベース名>?reconnect=true'

今回はMySQL2を使用しているのでmysql2とするのを忘れずに

database.ymlの修正

database.yml
production:
  <<: *default
  database: <データベース名> # 変更
  username: <ユーザー名> # 変更
  password: <%= ENV['APP_DATABASE_PASSWORD'] %>

cleardbのURLで確認したやつです
変更をコミットします

$ git add -all
$ git commit -m "update"

herokuにデプロイ

リポジトリをherokuにpush

$ git push heroku master

マイグレーション

$ heroku rake db:migrate

問題がなければ次のコマンドでhttps://(appの名前).herokuaopp.comにアクセスできます。

$ heroku open

補足

今回詰まった原因はmysql2ではなくmysqlにしていたことでした。デプロイできない原因を調べている中でapplication.rbやproduction.rbでassets関連の修正を加えることで改善するという記事を見かけてこの辺をいじったことでさらにハマってしまいました。
結果的には、RailsのAPIモードで作成したアプリであればassets周りは触らなくていいことが分かりました。データを返すAPIとしての機能だけならassetsは必要ないというのは納得です。

6
3
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
6
3