~/VibeHandbook
免費 PDF

05 · 05

環境變數與配置

有些值是不能寫進你的程式碼裡的:金鑰、資料庫密碼、某個服務的地址。還有一些值需要隨著應用執行的地方而改變。你在筆記本上測試的程式碼(dev 環境)應該連到一個測試資料庫;你的使用者真正在用的那個線上應用(prod,即生產環境)必須連到真實的那個——而且用的是同一份程式碼

答案就是環境變數(environment variables,常簡稱 "env vars"):一些有名字的值,它們住在程式碼之外,並在程式碼執行時被供給進去。程式碼說 "把 DATABASE_URL 給我",然後由環境來決定要交出哪一個。

# 一個配置檔案(例如 .env)—— 值住在這裡,而不是在程式碼裡

DATABASE_URL=postgres://localhost/myapp_dev
STRIPE_SECRET_KEY=sk_test_51H...     # dev = 一個測試用的金鑰
SEND_REAL_EMAILS=false               # 測試時別給真實使用者發郵件

有兩條規則能幫你省掉實打實的痛苦:

  • 金鑰絕對不放進程式碼裡。 你程式碼裡的任何東西都可能最終變成公開的(尤其是在一個共享的程式碼倉庫裡),而洩露一個支付金鑰或資料庫密碼是一場貨真價實的緊急事件。金鑰應該放在 env vars 裡,並且不進入版本控制。
  • dev 和 prod 是不一樣的。 重點在於同一份程式碼在兩者裡都表現正確,因為是由環境——而不是程式碼——來決定用哪個資料庫和哪些金鑰。

同一份程式碼,兩個家——不同的只是那些 env vars:

        SAME CODE
       /         \
      ▼           ▼
   ┌─────────────────┐     ┌─────────────────┐
   │  DEV            │     │  PROD           │
   │  你的電腦       │     │  託管(雲端)     │
   │  測試資料庫     │     │  真實資料庫     │
   │  測試API金鑰    │     │  正式API金鑰    │
   │  假郵件         │     │  真實郵件       │
   └─────────────────┘     └─────────────────┘
     只有你能看到            你的使用者能看到

想離線閱讀?

免費下載整本書的 PDF 或 EPUB。