本地沒問題,怎麼到了雲端種子資料就匯入不了

Tina
May 20, 2021

--

菜鳥轉職生如何解決的看似很簡單的問題

學期2–3遇到最困難的事情莫過於將本地的程式部署到雲端,沒錯就是Heroku 和 MongoDB Atlas。

先簡單介紹一下Heroku,他是一個能免費將自己的程式部署到雲端的PasS服務,可以讓我們省去架設主機等麻煩的過程,專注於優化自己的程式碼。

而 MongoDB Atlas 則是雲端資料庫伺服器,過去我都是使用 MongoDB 的本地資料庫來儲存資料,而現在已經將透過 Heroku 借用了他們的雲端主機,想當然資料庫也是要存在雲端囉!

而這兩個聽起來很方便的工具,卻常常因為一點小問題讓我一卡就卡了一下午或一整天,我認為是在串接這兩個工具上,時常會因不熟悉語法+不確定是否連接而造成問題。

以下先來分享讓我卡最久的一些問題:我在本地可以成功上傳種子資料,為何沒辦法上傳至MongoDB Atlas上

當初卡了很久,搜尋很久也沒有找到相關的說明(中文+英文),最後是休息一陣子後,換了一個想法也換了一個搜尋關鍵字heroku can not load seeds,結果神奇的在第一個結果就有答案,原因就是要上傳至雲端的種子資料與語法不同

當要上傳本地的資料庫時,只要打 npm run seed 就可以順利將種子資料從入本地資料庫

而若是要上傳至雲端的資料庫的話,就必須使用以下語法,需要在原先的指令多加 heroku run npm run seed 就可以成功上傳了!

而以為順利度過難關的我,在下一次作業中又遇到了下一個難關,在匯入雲端種子資料時,竟然又遇到另外一個問題,terminal中有以下的報錯資訊

mongoerror: authentication failed

這時候就覺得真的要固定設錯誤通知,才會知道每次錯誤時應該從哪邊追蹤debug。

以下分享我在找錯誤時的層層推進

  1. 先確認是否資料也匯入不了本地資料庫
    若是的話先確保資料能匯入本地資料庫,這時候很大可能是設定連線mongoose有問題
  2. 再確認串接至雲端的程式碼有沒有錯字
const mongoose = require(‘mongoose’);
const MONGODB_URI =
process.env.MONGODB_URI || ‘mongodb://localhost/url-shortener’;
mongoose.connect(MONGODB_URI, {
useNewUrlParser: true,
useUnifiedTopology: true,
});

3. 確認在 heroku 中寫入 MongoDB Atlas 的連線資訊都沒有錯:尤其要確認帳號密碼的問題。

至於我是在哪部分出錯的,大概是在第三步驟才找到錯誤,我直接將錯誤訊息放到 google 搜尋,stack overflow幾乎都是建議查看帳號密碼是否填入錯誤,但實際上我也是由MongoDB Atlas 直接複製value,照理說是不會有錯的,但重點就是照著這個順序,我成功的將種子資料匯入雲端資料庫了!

在這個資料庫及學習程式的過程中,深深體會到『關鍵字』的重要性,結論:

真的要解決問題下對關鍵字超重要,直接省超多時間!

--

--

Tina
Tina

Written by Tina

前端工程師 Mix 數位行銷人

No responses yet