本記事について
RailsアプリをHerokuへデプロイする機会があったので、備忘録として当記事を作成しました。
ほぼ参考にさせていただいたサイトや記事の通りですが、自分が詰まった部分については詳しく記載しました。
2023/3/26追記:
現在、herokuの無料プランは終了しています。
環境:
- MacOS 10.13.4
- Rails 5.2.0
- DB: MySQL
Railsプロジェクト作成
脳死 rails new するためのコマンド - Qiita 参照
※Herokuのアプリ名には、英数字とハイフンしか使用できないので、このとき作るアプリの名前も英数字とハイフンで作成すること!!!
作成したRailsプロジェクトのGit管理
- Gemfile修正
sqlite3
が入っている場合、production環境でsqlite3が利用されないように修正する。
gem 'sqlite3', group: [:development, :test]
mysql2
を追加
gem 'mysql2'
- コマンドライン上で、作成したRailsプロジェクトのディレクトリに移動
- 以下のコマンドを実行すると、プロジェクトがGitで管理されるようになる。
$ git init
$ git add .
$ git commit -m "<適当なコミットメッセージ>"
- 以下のコマンドで、コミットログに問題がないか確認
$ git log
Herokuのアカウント作成
Herokuのtoolbeltインストール
- これをインストールすると、コマンドライン上でherokuコマンドが使えるようになります。
https://devcenter.heroku.com/articles/heroku-cli
$ brew tap heroku/brew && brew install heroku
- Herokuのバージョンを確認
$ heroku -v
SSHキーの追加
キーの作成(現在作成中)
SSHキーの設定関連(現在作成中)
作成したHerokuアカウントにキーを追加
- herokuにログイン
$ heroku login
- 以下のコマンドでSSHキーがherokuのアカウントに追加されます。
$ heroku keys:add ~/.ssh/id_rsa.pub
※id_rsa
の部分は、先ほど作成したSSHキーの名前に置き換えること。
- 追加に成功していれば、以下のコマンドで追加したSSHキーが確認できます。
$ heroku keys
Herokuにアプリケーションを作成
- コマンドライン上で、先ほど作成したRailsプロジェクトのディレクトリに移動
- Herokuにアプリケーションを作成
$ heroku apps:create <アプリの名前>
<アプリの名前>
には、先ほど作成したRailsプロジェクト名を入れる。
※Herokuのアプリ名には英数字とハイフンしか使えない。
- Herokuのリモートリポジトリを確認
$ git remote -v
上記コマンドを実行すると以下のように出力される。
heroku https://git.heroku.com/<アプリの名前>.git (fetch)
heroku https://git.heroku.com/<アプリの名前>.git (push)
origin git@github.com:shou1012/<アプリの名前>.git (fetch)
origin git@github.com:shou1012/<アプリの名前>.git (push)
- Herokuのアプリケーション名変更
上記手順で出力された<アプリの名前>
が異なっている場合、以下のコマンドでHerokuのアプリケーション名が変更できる。
$ heroku git:remote -a <変更後のアプリの名前>
HerokuのDB設定
DBを追加する
下記コマンドを実行すると、「ClearDB MySQL」というアドオンが「Igniteプラン」で追加される。
$ heroku addons:create cleardb:ignite
以下のようなエラーが出た場合は、Herokuアカウントでクレジットカード情報の登録が必要。
▸ Please verify your account to install this add-on plan (please enter a credit card) For more
▸ information, see https://devcenter.heroku.com/categories/billing Verify now at
▸ https://heroku.com/verify
※アドオンの追加にはクレジットカード情報の登録が必要だが、「Igniteプラン」は無料のため、この設定だけで料金が発生することはない。(2022/3/20(Sun)現在)
詳細はこのURLを参照
Herokuアプリの環境変数設定
- ClearDBのURL確認
以下のコマンドで、ClearDBのURLが確認できる。
$ heroku config
=== <アプリの名前> Config Vars
CLEARDB_DATABASE_URL: mysql://<ユーザー名>:<パスワード>@<ホスト名>/<データベース名>?reconnect=true
- 環境変数の設定
上記コマンドで表示されたそれぞれの値を変数に設定する。
$ 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'
※ RailsのGemfileで'mysql2'を使用しているので、DATABASE_URL
はmysql2://
で始める必要がある。
設定内容を確認すると、以下のように表示される。
$ heroku config
=== <アプリの名前> Config Vars
CLEARDB_DATABASE_URL: mysql://<ユーザー名>:<パスワード>@<ホスト名>/<データベース名>?reconnect=true
DATABASE_URL: mysql2://<ユーザー名>:<パスワード>@<ホスト名>/<データベース名>?reconnect=true
DB_HOSTNAME: <ホスト名>
DB_NAME: <データベース名>
DB_PASSWORD: <パスワード>
DB_PORT: 3306
DB_USERNAME: <ユーザー名>
Herokuへデプロイ
Railsプロジェクトに必要な準備
-
config/environments/production.rb
に以下を追記
(この辺りの設定に関しては、後々修正します。)
config.assets.compile = true
config.assets.initialize_on_precompile=false
- rootへのルーティング作成
Herokuでアプリケーションにアクセスした時、最初に開くページをRails側で設定してください。
Herokuへデプロイ
- ローカルリポジトリをHerokuへpush
$ git push heroku master
※master
以外のローカルブランチをpushする場合は、以下のコマンドを実行してください。
$ git push heroku <ブランチ名>:master
- HerokuのDBのmigrate
$ heroku rake db:migrate
- アプリケーションにアクセス
以下のコマンドを実行すると、ブラウザでアプリケーションが開きます。
$ heroku open