1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Herokuへのデプロイの流れ。

Last updated at Posted at 2022-09-29

目的

herokuへのデプロイの流れを忘れないようにするための備忘録。

Herokuへのデプロイの流れ

0. herokuのインストール

ターミナル上で以下コマンドを入力

% brew tap heroku/brew && brew install heroku

以下のようにバージョンが無事に表示できるようになれば問題ない。

% heroku --version
=> heroku/7.40.0 darwin-x64 node-v12.16.2

1. herokuへログイン

ターミナル上で以下コマンドを入力

% heroku login --interactive
=> Enter your Heroku credentials.
(メールアドレスを入力し、エンターキーを押す)
=> Email:sample@sample.com
(パスワードを入力して、エンターキーを押す)
=> Password:********

下記表示でログインが確認できる状態になれば問題なし。

Logged in as sample@sample.com

2. heroku上へアプリの作成を行う

ターミナル上で以下コマンドを実行

% heroku create アプリ名
% git config --list | grep heroku
=>`fatal: not in a git directory`以外が表示されていれば問題ない

3. heroku上でMySQLを使えるよう

Herokuでは、使用するデータベースの設定が、デフォルトでPostgreSQLというデータベースになっているため、開発環境で使用したデータベースに合わせ、要設定変更。
今回は、開発環境でMySQLを使用したため、MySQLに変更する。

# ClearDBアドオンを追加し、MySQLを使えるようにする
% heroku addons:add cleardb

これでデータベースをMySQLに設定できた。
しかし、Ruby on Railsを使う場合は、MySQLに対応するGemについて考慮し、その設定を変更する必要がある。

# ClearDBデータベースのURLを変数heroku_cleardbに格納
% heroku_cleardb=`heroku config:get CLEARDB_DATABASE_URL`

# データベースのURLを再設定
# mysql2というGemを使用しているので、DATABASE_URLの冒頭がmysql2://に変更されている
% heroku config:set DATABASE_URL=mysql2${heroku_cleardb:5}

4. herokuで非公開の値を管理する

アプリケーションを開発する際、サーバーのアクセスキーやAPIキーなど、外部に漏らしたくない情報を扱う場面がある。
デプロイをする際、それらの情報はセキュリティの観点から暗号化する必要がある。
暗号化された情報は、開発環境および本番環境であらかじめ用意した鍵を用いて復号(暗号化された情報を使えるように)する。

Railsのバージョン5.2以降では、credentials.yml.enc(暗号化用ファイル)を利用して、それらの情報を暗号化する。
credentials.yml.encの暗号文は、master.keyを用いることで復号し、ファイル内の記述を確認できる。
master.keyは非常に重要な情報なので、デフォルトで.gitignoreに記述されており、Gitで管理されない仕組みになっている。

# credentials.yml.encをmaster.keyによって復号し、中身を確認・編集するためのコマンド
# credentials.yml.encとmaster.keyがない場合は、上記コマンドによりcredentials.yml.encとmaster.keyを新規作成した後に、中身を確認・編集することができる。
% EDITOR="vi" bin/rails credentials:edit
# 確認後は、「escキー」→「:」→「q」と入力し、「enterキー」を押して credentials.yml.encを閉じることができる

4.1 credentials.yml.encをリモートリポジトリに反映させる

credentials.yml.encを新規作成できた後は、一連の変更をコミット・プッシュして、リモートリポジトリに反映させる。
しかし、セキュリティの面から、master.keyはデフォルトでGitに管理されない仕組みとなっている

つまり、master.keyはこのままだとHeroku上へデプロイできず、credentials.yml.encもHeroku上で扱えないということになります。

そこで、Heroku上に別途master.keyを設置し、Heroku上でもcredentials.yml.encを扱えるようにする必要がある。

4.2 環境変数(master.keyの値を入れる秘密の箱)を設定する

# Heroku上に環境変数を設定ためのコマンド
# config:set 環境変数名="値"で実行
% heroku config:set RAILS_MASTER_KEY=`cat config/master.key`

# 環境変数一覧を確認できる
% heroku config

5. 動作環境を変更する

Stackという、Herokuにおけるアプリケーションの動作環境を変更する必要がある。
(Stackはデプロイされたアプリケーションを読み取り正常に稼働させるために用意されている。)
デフォルトのStackは「Heroku-20」ですが、今まで開発に使用してきたRubyのバージョンは、Heroku-20では使用できない。
そのため、Rubyのバージョン2.6.5が動作するStackを指定する必要がある。

# Herokuで利用するStackのver指定
% heroku stack:set heroku-18 -a アプリ名

6. herokuで使用するNodeのバージョンを指定する

環境構築の際、Nodeのversion14をインストールして、今までアプリ開発を行ってきた。
しかし、Herokuの初期設定ではNodeのversion16を使用する設定になっているため、このままでは正常なデプロイが行えない。
そのため、HerokuでもNodeのversion14を使用できるよう、使用するNodeのバージョンを指定する必要がある。

具体的には、Herokuのbuildpackという機能の使用や、package.json内の記述を変更して、使用するNodeのバージョンを指定する。
※buldpackとは、デプロイされたコードをHeroku上で適切に扱うために用意された、スクリプトのパッケージです。これがあることにより、Herokuで様々な言語のアプリを扱うことができている。
今回は、nodejsとrubyのbuildpackをインストールする。

# nodejsとbuldpackのインストール法
% heroku buildpacks:add heroku/nodejs
% heroku buildpacks:add heroku/ruby

# 「heroku buildpacks」コマンドの実行結果
=== アプリ名 Buildpack URLs
1. heroku/nodejs
2. heroku/ruby
と出れば問題なくインストールできている証拠。

# heroku/rubyがheroku/nodejsより上にきている場合は、下記のコマンドを順に実行して、buildpackの順番を入れ替える。
% heroku buildpacks:remove heroku/ruby
% heroku buildpacks:add heroku/ruby
% heroku buildpacks

続いて、使用するnodeのバージョンをpackage.jsonへ記述する。
まず、下記のコマンドを実行し、インストールされているnodeのバージョンを確認する。

% node -v

# 以下、実行結果の例(数字は異なる可能性がある)
v14.15.3

次に、package.jsonのファイルを開き、以下のように追記する。

{
 "name": "アプリ名",
 "private": true,
 "dependencies": {
   "@rails/actioncable": "^6.0.0-alpha",
   "@rails/activestorage": "^6.0.0-alpha",
   "@rails/ujs": "^6.0.0-alpha",
   "@rails/webpacker": "4.2.2",
   "turbolinks": "^5.2.0"
 },
 "version": "0.1.0",
 "devDependencies": {
   "webpack-dev-server": "^3.10.3"
 },  // ここにカンマを記述
 "engines" : {
   "node": "14.x.x"  // ここに先ほど確認したバージョンを記述
 }
}

記述内容を変更したpackage.jsonをコミット・プッシュして、リモートリポジトリに反映。

7. herokuへアプリケーションを追加する。

Herokuにデプロイする際には、Gitの仕組みを使用する。Gitで管理しているリポジトリをHerokuへ反映することで、Heroku上で該当するアプリケーションの操作が可能になる。Gitで管理しているリポジトリをHerokuに反映するためにはgit push heroku masterというコマンドを用います。

% git push heroku master

8. heroku上でマイグレーションを実行

Herokuにアプリケーションの情報を反映することができた。
しかし、データベースにはマイグレーションの情報が反映されていない。
rails db:migrateを実行したいところですが、そのままコマンドを入力しても実行できない。
Heroku上で実行したいコマンドの頭には、heroku runをつける。

% heroku run rails db:migrate

9. 公開を確認する

#公開を確認するコマンド
% heroku apps:info

10. デプロイ済みのアプリケーションに変更修正を加えた場合

  1. 変更修正をcommitする
  2. ブランチを作成していた場合は、masterブランチへマージする
  3. Heroku上にpushする
    (テーブルに変更を加えた場合は)Heroku上でマイグレーションを実行する
1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?