Heroku連接雲端MongoDB的方法

之前我們已經簡單的在Heroku上部署了正在開發的web應用, 現在我們的應用要使用MongoDB數據庫, 如何在雲端部署一個MongoDB連接呢?

再進一步, 最終我們的目的是生產和開發環境連接不同數據庫. 本文將完整敘述整個流程.

註冊MongoLab賬號

我們這裏將使用MongoLab, 首先需要註冊賬號, 相關文檔請見這裏

創建一個新數據庫

登陸後按照如下操作

mongolab-1

選擇single node, sandbox, 注意, 只有特定的區域纔有single node節點可選, 需要自己手動試一下哪個可行.

mongolab-single-node

創建成功後的效果

如果沒有創建成功, 多半是數據庫名稱衝突了, 多試幾個就好.

點擊Name進入數據庫, 提示要創建一個用戶來使用數據庫, 那麼我們切換到Users標籤, 點擊add database user

配置Mongolab數據庫連接字符串到heroku的配置文件中

$ heroku config:set MONGOLAB_URI=mongodb://<dbuser>:<dbpassword>@ds127958.mlab.com:27958/congyh
Setting MONGOLAB_URI and restarting ⬢ sheltered-everglades-85543... done, v10
...

同步本地開發數據庫的測試數據到Mongolab

創建一個臨時文件夾, 用於本地開發數據庫的備份

$ mkdir -p ~/tmp/mongodump

備份本地開發數據庫

$ mongodump -h localhost:27017 -d Loc8r -o ~/tmp/mongodump

還原數據到雲端數據庫

$ mongorestore -h ds127958.mlab.com:27958 -d congyh -u <username> -p <password> ~/tmp/mongodump/Loc8r
...
2016-12-11T12:40:06.685+0800    finished restoring congyh.locations (3 documents)
2016-12-11T12:40:06.685+0800    done

檢查數據還原情況

首先使用mongo shell連接到遠程數據庫

$ mongo ds127958.mlab.com:27958/congyh -u <username> -p <password>
MongoDB shell version v3.4.0
connecting to: mongodb://ds127958.mlab.com:27958/congyh
MongoDB server version: 3.2.11
WARNING: shell and server versions do not match
rs-ds127958:PRIMARY>

列出數據

> show collections
> db.locations.find()

讓應用根據環境自動選擇連接的數據庫

經過以上操作, 我們獲得了一個和本地開發數據庫同步的雲端數據庫, 由於我們的應用同時在本地開發和Heroku部署, 需要讓應用根據環境自動連接到正確的數據庫.

database-in-two-locations

設置NODE_ENV環境變量

首先需要將heroku上部署的應用切換到production環境(注意: 要在應用根目錄下執行指令).

$ heroku config:set NODE_ENV=production
Setting NODE_ENV and restarting ⬢ sheltered-everglades-85543... done, v11
NODE_ENV: production

更改應用源碼中數據庫連接的設置

var dbURI = 'mongodb://localhost/Loc8r';
if (process.env.NODE_ENV === 'production') {
    dbURI = process.env.MONGOLAB_URI;
}
mongoose.connect(dbURI);

本地測試連接到本地開發數據庫和Mongolab數據庫

首先測試連接到本地開發數據庫

$ nodemon
Mongoose connected to mongodb://localhost/Loc8r

然後測試連接到Mongolab數據庫

$  NODE_ENV=production MONGOLAB_URI=mongodb://<dbuser>:<dbpassword>@ds127958.mlab.com:27958/congyh nodemon
Mongoose connected to mongodb:///<dbuser>:<dbpassword>@ds127958.mlab.com:27958/congyh

測試成功後, 將應用推送到Heroku倉庫部署

$ git add .
$ git commit -am "add mongolab support"
$ git push heroku master

通過檢查heroku雲端應用日誌, 驗證數據庫連接情況

$ heroku logs
...
2016-12-11T05:08:18.152506+00:00 app[web.1]: Mongoose connected to mongodb://<dbuser>:<dbpassword>@ds127958.mlab.com:27958/congyh

以上, 就完成了生產和開發環境連接不同數據庫的配置.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章