再也不用擔心專案 A 安裝的元件會影響到專案B了

傳統上都是在系統只安裝一個 Homestead,然後每個專案設定不同站台,各專案共用同一個資料庫。這種方式大體上也沒什麼問題,但有時若想測試一些東西,如安裝 Facebook 的 XHProf + XHGUI,將這些測試用的東西安裝在開發用的 Homestead 似乎不妥,因此最理想的方式是每個專案有自己的 Homestead,各專案可以安裝自己所需的元件,而不影響其他專案。

Version


Laravel 5.2.23
Homestead 0.4.2
OS X 10.11.3

Prerequisite


在 OS X 已經成功安裝好 Homestead。1 1詳細請參考如何在 OS X 安裝 Homestead?

安裝 laravel/homestead 套件


1
oomusou@mac:~/MyProject$ composer require laravel/homestead --dev

在專案目錄下安裝 laravel/homestead 套件,這是 Laravel 官方的套件,不過目前並沒有放進 Laravel 5.2 內,需另外自行安裝。

1
Using version ^3.0 for laravel/homestead
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
  - Installing laravel/homestead (v3.0.2)
    Downloading: 100%

Writing lock file
Generating autoload files
> php artisan clear-compiled
> php artisan optimize
Generating optimized class loader

建立 Homestead 設定檔


1
oomusou@mac:~/MyProject$ php vendor/bin/homestead make

在目前目錄下建立 VagrantfileHomestead.yaml

1
Homestead Installed!

傳統我們還可能需要修改 Homestead.yaml 的 shared folder,但因為 Homestead 目前只用在一個專案,所以預設值都已經設定好了,不必修改。

啟動 Homestead


1
oomusou@mac:~/MyProject$ vagrant up

接著 Homestead 就正常啟動了,剩下的用法跟你之前熟悉的 Homestead 完全一樣。

由於 Homestead 會在 ~/VirtualBox VMs 目錄下建立與專案目錄名稱相同的目錄放置 VM,所以唯一的限制是專案目錄名稱不能重複,否則 vagrant up 會失敗。

Conclusion


  • 由於每個專案都有自己的 VM,優點是非常乾淨,缺點是非常浪費磁碟空間。
  • 由於每個專案都有自己的 VM,當切換到其他專案時,記得要先將目前 Homestead vagrant halt 關機,然後再將另一個專案的 Homestead vagrant up 開機。
  • 由於每個專案都有自己的 VM,所以測試用的專案可以隨時 vagrant destroy --force 掉,不會影響正式開發的 Homestead。
  • 實務上非常推薦這種使用方式,可以將不同專案的 side effect 降到最低。

Sample Code


完整的範例可以在我的 GitHub 上找到。

2016-03-20