Laravel Homestead踩坑記3——資料庫與配置檔案

long0發表於2020-12-22

對於Laravel框架的目錄結構可以點選該連結檢視更具體一些的目錄結構

我們在全棧開發使用資料庫時,需要經過這些過程:

  1. 啟動資料庫伺服器:這裡是 Homestead 中的 mysql 伺服器。這是給web伺服器連線的。

  2. 啟動web伺服器:這裡是 Homestead 中的 Nginx web伺服器。這是給客戶端請求連線的。

  3. 編寫後端指令碼:這裡是在 Homestead 中的 php 環境中。

  4. 視察資料庫動態:需要資料庫視覺化管理工具。

啟動 Homestead 虛擬機器後,會自動啟動 web 伺服器和資料庫伺服器。

整個流程大概是:客戶端請求資料,會連線到後端的 web 伺服器,web 伺服器會讓 php 對請求進行邏輯處理,若需要對資料庫操作,php 則會再去連線到資料庫伺服器,對資料庫進行 php 的 CURD 指令。

- Homestead.yaml 配置檔案的簡單介紹

該檔案是虛擬機器的配置檔案,每次修改了該文件,都需要重啟虛擬機器。

  1. features :安裝可選功能。
  • 如果未建立虛擬機器時(注意是未建立),建立虛擬機器時會識別 features 裡為 true 的選項進行安裝(安裝到虛擬機器中),為 flase 的則不會安裝;
  • 如果是重啟虛擬機器,建立時已經安裝過的選項無論為true還是false都無作用,因為建立虛擬機器時已經安裝了其建立時為 true 的選項了。
  • 這裡我有一點不大清楚,homestead 預設是沒有安裝 mysql 的,並且我也沒有在 features 中啟用 mysql 的安裝,但是 php 還是可以連線上虛擬機器的 mysql ,有大佬知道的沒?不過我們還是把 mysql8 設為 true 比較好。
  • 另外一點,為什麼是 mysql8 而不是 mysql , 這是因為 features 的鍵名是以 \homestead\scripts\features 檔案中的檔名為名。
  1. servieces:禁用與啟用哪些伺服器(這裡是伺服器)。

    我們將 mysql 伺服器啟用了即可。這裡是 mysql 而非 mysql8。

  2. 注意點:

    • 注意縮排。
    • 當配置中鍵沒有值時,重啟虛擬機器會顯示”未定義變數 each”等啟動失敗的資訊,因此沒有值時,就不要寫鍵了!
    • 修改該配置檔案後要重啟虛擬機器才能生效。

      正確的寫法:

- .env 配置檔案和 config 配置檔案的區別

修改 .env 檔案後, 需要php artisan config:cache清理快取後才能生效

在早些版本的 Homestead 中只有 config ,而並沒有 .env 。我們在多個開發或專案版本迭代的時候,所使用的環境(使用的電腦)可能不同,這意味著 host 和 port 可能不同,那麼我們肯定得需要統一的 host 和 port,但這玩意兒顯然並不能進行統一,但我們又不能亂修改專案的 這些配置 ,改來改去的話,別人對改專案的測試就會出問題,那這改咋整呢?

因此引出了 .env 這個配置檔案,這個檔案駕馭於 config 之上。以 mysql 的配置為例,執行專案時,該專案會優先從 .env 中的配置進行處理,若. env 未對 mysql 進行配置,才會從 config 的 database.php 獲取配置。(可以刪除 .env 進行測試)

簡單理解就是,每個隊友都有一個屬於自己的唯一的 .env ,該 .env 不會經過任何其他人的手裡,它只屬於自己;而 config 僅有一個且不屬於任何一個隊友,它會不斷的經過他人之手。

這樣的話,A隊友寫了個專案,對 config 的 database.php 部分進行了配置,B隊友拿過來該專案在自己的電腦上執行,只需配置自己 .env 檔案即可,C隊友拿過去,也只需對他自己的 .env 檔案進行配置,這樣子的話,就不會對專案的根電腦(A隊友)的配置亂修改了。當然,A隊友也可以配置自己的 .env 。

我們再檢視 專案根目錄下的 .gitignore 檔案,該檔案標記了該專案哪些檔案無需上傳到github上,其中就包含了 .env 配置檔案。當隊友 clone 該 github 專案時,並沒有將 .env 拷貝過來,只把 config 拷貝了過來。

若 .env 不小心被刪了,可以拷貝一份 .env.example 。

- 資料庫視覺化管理工具——Workbench

雖然 Homestead 虛擬機器中提供了很多開發時需要的工具,比如 mysql,但是並沒有 mysql 視覺化管理的工具,我們總不能一直用命令列來檢視資料庫吧,因此我們需要自己在 windows 主機中下載一個視覺化工具使用。我這裡使用的是 mysql 官方出的 Workbench

- 資料庫視覺化管理工具連線到 mysql 伺服器

連線伺服器時得需要開啟資料庫伺服器,並且得知道 mysql 伺服器得 host 和 port。

開啟資料庫伺服器很簡單,就是啟動 homestead 虛擬機器。

修改資料庫配置,以 .env 為例 挨個說明:

注意:這裡修改的只是【連線伺服器】的配置值,並不是將伺服器本身的 ip 進行修改!

  1. connection:選擇的是什麼資料庫,比如 mysql、mongodb 等。

  2. HOST與PORT : 127.0.0.1:3306 ——這是程式碼要寫的、配置檔案要寫的

    我們知道 專案程式碼 是獨立於虛擬機器的環境中執行的,專案中的所有配置都是在虛擬機器的環境中讀取的,包括 相互獨立的 ip。 因此專案程式碼上訪問的是虛擬機器上的 ip,即程式碼要寫成 host=127.0.0.1 和 port=3306 。

  3. HOST與PORT :127.0.0.1:33060192.168.10.10:3306 ——資料庫管理工具(位於宿主機)要連線的

    宿主機是無法訪問虛擬機器上的 ip 的,而 Homestead 給我們宿主機分配了一個對應ip :host=127.0.0.1 和 port=33060,也可以直接連線192.168.10.10:3306

  4. database:預設將要連線的資料庫的名稱。這裡我們還沒有建立。

  5. username=homestead,password=secret :

    訪問資料庫伺服器時需要獲取使用者許可權,Homestead 給我們預設 username=homestead,password=secret。

知道了以上資訊,我們就可以開啟資料庫視覺化管理工具進行管理了。

同時我們可以直接寫程式碼對資料庫進行操作了,在程式碼中運算元據庫無需再指定資料庫的ip、埠、資料庫名稱等資訊了,因為在 .env 或 config 都已經配置了預設值了。

- 資料庫的備份:

我們知道整個專案環境都在虛擬機器中執行的,包括資料庫存在於虛擬機器中。這一步的備份是為了防止虛擬機器被 vagrant destroy 時,同時把資料庫也給刪除掉。

要開啟自動資料庫備份,需新增如下的行到你的 Homestead.yaml 檔案:

backup: true

具體請看:資料庫備份

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章