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
そしたら上記のURLにアクセスし、左上の方にある「New」→「Crete new app」を選びます。
次にアプリ名と場所を選んで、アプリを作成します。
作成したらアプリのページに飛ぶので「Deploy」をクリックし、デプロイ方法を選びます。今回はGitHubのリポジトリからデプロイします。GitHubのリポジトリからデプロイした場合、pushが反映されるので便利です。
Githubを選んだら下の「Connect to GitHub」をクリックすると認証画面がでるのでOKします。
そしたら、リポジトリ名を入れてSerachします。出てきたリポジトリと「Connetct」します。
「Automatic deploys」で自動でデプロイするブランチを選択すれば、pushした際に自動でデプロイしてくれます。
まだHerokuにデプロイしていないので、「Manual deploy」で初回が手動でデプロイしてあげましょう。
次にDBを作成します。
左上を①→②の順でクリックします。
次に一番左の「Heroku Postgres」を選んで「Create one」をクリックします。
次に、右上の方にある「Install Heroku Postgres」をクリックします。
次にプランとインストールするアプリを選びます。アプリは先程作成してアプリを選択します。
選択が終わったら「Submit Order form」をクリックします。
これでDBの設定が終わりました。設定が終わったらデフォルトでHerokuの環境変数に「DATABASE_URL」が追加されるはずなのでその確認をします。
「Settings」→「Config Vars」の「Reveal Config Vars」をクリックすると環境変数一覧がでてくるのでそこに「DATABASE_URL」があれば大丈夫です。
マイグレーションとシードの挿入を行う
次にHerokuのDBにマイグレーションとシードの挿入を行います。
以下の作業はコマンドプロンプトからでもできますが、今回はHeroku上で行います。
右上の「More」→「Run console」をクリックします。
そしたら「bash」と打ち、runをクリックします。
次にローカルと同じようにSequelizeのconfigがあるフォルダに移動し「npx sequelize db:migrate」と打ちます。私はDBというフォルダに設定ファイルがあるので移動しています。
コマンドを打ったらローカルと同じようなログが出たらマイグレーション成功です。
続けてソードの挿入もやってしまいましょう。「npx sequelize db:seed:all」これでシードの挿入もできました。
一応sequelize-cliのGitHubも載せておきます。
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" }