初心者のプログラミング日記

プログラミング初心者の日記

プログラミングに関することを書いていきます。

Expressで作ったアプリをHerokuで公開する

今回はsequelizeを使っているのでHerokuのDB構築からSeedの挿入までやりたいと思います。
Herokuはpostgresを使っているのでそれに合わせています。

ライブラリ バージョン
express 4.17.1
sequelize 6.3.5
sequelize-cli 6.2.0

Sequelizeのconfig.jsonの変更

Herokuはconfig.jsonのproductionを使うのでここを変更します。

"production": {
    "username": "postgres",
    "password": "postgres",
    "database": "databse_production",
    "host": "localhost",
    "dialect": "postgres",
    "use_env_variable": "DATABASE_URL", //変更
    "dialectOptions": { //追加
      "ssl": {
        "require": true,
        "rejectUnauthorized": false
      }
  }

まず「use_env_variable」の所を「DATABASE_URL」に変更します。「DATABASE_URL」は後ほど紹介しますが、HerokuのDBの環境変数になります。
「dialectOptions」にはssl接続の設定を書いておきます。

Herokuで新規アプリを作成

まずはHerokuから新規アプリを作成しましょう。
https://dashboard.heroku.com/apps
f:id:nasubiFX:20210204173102p:plain
そしたら上記のURLにアクセスし、左上の方にある「New」→「Crete new app」を選びます。
f:id:nasubiFX:20210204173300p:plain
次にアプリ名と場所を選んで、アプリを作成します。
f:id:nasubiFX:20210204173709p:plain
作成したらアプリのページに飛ぶので「Deploy」をクリックし、デプロイ方法を選びます。今回はGitHubリポジトリからデプロイします。GitHubリポジトリからデプロイした場合、pushが反映されるので便利です。
Githubを選んだら下の「Connect to GitHub」をクリックすると認証画面がでるのでOKします。
f:id:nasubiFX:20210204174205p:plain
そしたら、リポジトリ名を入れてSerachします。出てきたリポジトリと「Connetct」します。
f:id:nasubiFX:20210204174629p:plain
「Automatic deploys」で自動でデプロイするブランチを選択すれば、pushした際に自動でデプロイしてくれます。
まだHerokuにデプロイしていないので、「Manual deploy」で初回が手動でデプロイしてあげましょう。

次にDBを作成します。
f:id:nasubiFX:20210204180312p:plain
左上を①→②の順でクリックします。
f:id:nasubiFX:20210204180601p:plain
次に一番左の「Heroku Postgres」を選んで「Create one」をクリックします。
f:id:nasubiFX:20210204180902p:plain
次に、右上の方にある「Install Heroku Postgres」をクリックします。
f:id:nasubiFX:20210204181040p:plain
次にプランとインストールするアプリを選びます。アプリは先程作成してアプリを選択します。
選択が終わったら「Submit Order form」をクリックします。

これでDBの設定が終わりました。設定が終わったらデフォルトでHerokuの環境変数に「DATABASE_URL」が追加されるはずなのでその確認をします。
f:id:nasubiFX:20210205164640p:plain
「Settings」→「Config Vars」の「Reveal Config Vars」をクリックすると環境変数一覧がでてくるのでそこに「DATABASE_URL」があれば大丈夫です。

マイグレーションとシードの挿入を行う

次にHerokuのDBにマイグレーションとシードの挿入を行います。
以下の作業はコマンドプロンプトからでもできますが、今回はHeroku上で行います。
f:id:nasubiFX:20210205165218p:plain
右上の「More」→「Run console」をクリックします。
f:id:nasubiFX:20210205165451p:plain
そしたら「bash」と打ち、runをクリックします。
f:id:nasubiFX:20210205165828p:plain
次にローカルと同じようにSequelizeのconfigがあるフォルダに移動し「npx sequelize db:migrate」と打ちます。私はDBというフォルダに設定ファイルがあるので移動しています。
コマンドを打ったらローカルと同じようなログが出たらマイグレーション成功です。

続けてソードの挿入もやってしまいましょう。「npx sequelize db:seed:all」これでシードの挿入もできました。
一応sequelize-cliGitHubも載せておきます。
https://github.com/sequelize/cli

私の場合はこのままではエラーになりましたので、エラーになった人だけ以下のコマンドを実行して見てください。

まず、コマンドプロンプトに移動してコマンドを打って行きます。

heroku login -i 
heroku reset -a アプリ名
heroku logs --tail -a アプリ名

Herokuにログインして、アプリの再起動をしています。一応最後のコマンドでエラーが出た場合に確認することができます。

アプリが起動しない場合

以下のファイルを追加すらば治るかもしれません。

//Procfileというファイル名
web: node ./bin/www

またはapp.jsonを作成する必要があるかもです。

//app.jsonの内容
{
  "name": "アプリ名",
  "description": "アプリ",
  "logo": "",
  "keywords": ["node"],
  "image": "heroku/nodejs"
}