Nic Lin's Blog

喜歡在地上滾的工程師

[Rails] 基礎安全觀念 database.yml 與 .gitignore

啟動 rails server 遇到了這個錯誤嗎?

ActiveRecord::ConnectionNotEstablished

No connection pool with id primary found

這個問題通常是,Rails 的 ActiveRecord 在初始化的時候讀不到你的數據庫(database),可以先檢查 config/database.yml這隻檔案是否存在?

螢幕快照 2017-04-19 下午5.38.59.png

那麼最近很多同學遇到關於 cp config/database.yml.example config/database.yml的問題

覺得這個是屬於安全性的觀念,來寫一下好了

先了解 .gitignore

Git 在項目上傳的時候,通常我們會對整個項目做 tracking(追蹤),所以當追蹤之後只要有任一檔案新增或是變動,Git 都會紀錄,由於我們很常使用 git add . ,所以都會把這次「所有」變動的項目加入 commit。

那麼,如果有很機密的檔案不能上傳,怎麼辦?例如部屬到機器上的資訊,包括 IP, 數據庫帳號密碼,這些東西如果上傳到 Github 的公開專案,豈不是全世界都看光光了,可以任意進出你的機器或數據庫。

因為我們的 Rails 專案底下掌管三種環境(Production, Development, Test)的數據庫資訊都會放在 config/database.yml

所以將我們要過濾掉,不得上傳的檔案路徑,寫進 .gitignore 裡面,他就會過濾這隻檔案,不給予追蹤了

...
...
config/database.yml
...

置放模版

那麼這時候如果你拉下來的專案,沒有了 config/database.yml ,我們又不會特地去背這個,卻又是 Rails Project 運行的必要檔案,怎麼辦?

所以我們會寫一隻「模版」放在專案裡面,但是又要能夠清楚表達他是什麼樣的檔案,又要能被追蹤(因為我們已經先屏蔽了 config/database.yml),所以我們就會做一隻模版放進去

  1. config/database.yml.example
  2. config/database.yml.template

這兩種都可以,或是你有更好的寫法。

那麼經歷以上兩個說明,就可以完整解釋為什麼要在作業 clone 下來運行前輸入這個指令了

cp config/database.yml.example config/database.yml

cp = copy = 複製的意思

cp a.file b.file 解釋:複製 a.file 檔案,並把複製出來的檔案命名為 b.file,且在同一個目錄

comments powered by Disqus