由Github抓下來的專案,並不是直接可以執行,需要透過一定步驟重建

目前我都將所有範例的source code放在Github上,但有人跟我反應抓下來的Laravel專案無法執行,並不是我故意留一手,而是git採用了.gitignore機制,並沒有所有檔案都進Github,所以整個專案抓下來後,必須要有重建的步驟,整個專案才會還原。

Version


Laravel 5.1.24

深入探討.gitignore


在每個Laravel專案目錄下,都有一個隱藏的.gitignore檔,其內容如下 :

.gitignore
1
2
3
4
5
/vendor
/node_modules
Homestead.yaml
Homestead.json
.env

它所描述的是沒進git repository的目錄與檔案。

  • /vendor : 負責放composer所下載的PHP package,其中包含Laravel的完整source code。
  • /node_modules : 負責放npm所下載的Node.js package。
  • Homestead.yaml : 負責描述Homestead vm資訊。
  • Homestead.json : 負責描述Homestead vm資訊。
  • .env : 負責放Laravel的全域資訊。

Homestead.yamlHomestead.json只會使用一個而已,通常使用Homestead.yaml
其中最重要的是/vendor.env,沒有這兩個,Laravel會完全跑不起來。

也因為這些檔案都沒有進git repository,所以當然也不會上Github,因此當你git clone一個專案下來時,Laravel一定跑不起來。

還原Laravel專案


git clone

1
oomusou@mac:~$ git clone https://github.com/oomusou/xxx MyProject

還原vendor目錄

1
oomusou@mac:~/MyProject$ composer install

注意是composer install,不是composer update

還原node_modules目錄

1
oomusou@mac:~/MyProject$ npm install

若你有用到一些Node packages,如Laravel Elixir,則可選擇執行 npm install

還原.env

1
oomusou@mac:~/MyProject$ cp .env.example .env
oomusou@mac:~/MyProject$ php artisan key:generate

只單純從.env.example複製而來的.env還無法執行Laravel,因為.env.exampleAPP_KEYSomeRandomString,必須下php artisan key:generate重新產生APP_KEY

重建Homestead.yaml

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

啟動Homestead

1
oomusou@mac:~/MyProject$ vagrant up

等開機完成,至少Laravel首頁就出現了。

重建資料庫

若要重建資料庫,就要連進去Homestead才能migration與seeding,無法在OS X做。

1
oomusou@mac:~/MyProject$ vagrant ssh
vagrant@MyProject:~$ cd MyProject
vagrant@MyProject:~/MyProject$ php artisan migrate
vagrant@MyProject:~/MyProject$ php artisan db:seed

Conclusion


  • 這些步驟不只適用於Github,其他git server都適用,主要是因為這些package不應該進git repository,且Homestead.yaml.env會存放帳號密碼,會有security issue不適合放進git repository,所以特別在.gitignore加以排除,導致專案下載後,必須一些步驟才能還原專案。