[Express] 整合 postgreSQL 與 heroku
前置動作
# 安裝 pg 套件
$ npm install pg
# 在 heroku 上新增 postgreSQL 的 database
$ heroku addons:create heroku-postgresql:hobby-dev
Sequelize Config 設定
設定 Express 專案中 Sequelize 的 config
// config/config.json
{
//...
"production": {
"use_env_variable": "DATABASE_URL",
"protocol": "postgres",
"dialect": "postgres",
"dialectOptions": {
"ssl": {
"require": true,
"rejectUnauthorized": false
}
}
}
}
- 透過 heroku 產生 PostgreSQL 的資料庫後,在 Heroku 的環境變數中會自動把
DATABASE_URL
帶入 postgreSQL 資料庫的 URI,因此在設定檔中可以不用填寫帳號密碼,直接使用use_env_variable: "DATABASE_URL"
。 - 在
dialectOptions.ssl
中有一個rejectUnauthorized
選項,在未設定 SSL 前需要使用這個選項。如果沒有加上這個選項的話,在 node-postgres^8.0.0 之後會出現 SequelizeConnectionError: self signed certificate。
修改 port
發佈到 heroku 後,它會透過環境變數來告知我們要使用那一個 port,因此不能像開發環境時一樣使用 3000
:
// app.js
const port = process.env.PORT || 3000; // heroku 會自動給 process.env.PORT
建立 database
在 heroku 上建立 postgresql 時,資料庫會一併被建立,因此只需要進行 migrate 和 seed 的動作:
$ heroku run npx sequelize db:migrate
$ heroku run npx sequelize db:seed:all