為什麼你一定要使用Homestead 來開發Laravel 應用?

blank

為什麼你一定要使用Homestead 來開發Laravel 應用?

文章說明

運營社區多年,經常遇到很多新手詢問能不能不裝Homestead,有些同學還在損友的推薦下使用了WAMP, MAMP, PHPStudy 等集成環境。

個人開發PHP 也有六七年時間了,各種集成環境、自建的Windows 環境等都使用過。一路走來,踩坑太多,所以對虛擬機開發環境非常推崇。以至於在《Laravel教程- Web開發實戰入門》中,Homestead也是作為唯一的學習開發環境。

此篇文章不講太多技術細節,而是從一些反面例子,還有一些過去經驗來告訴你,如果在一開始就用上Homestead,你可以免去很多麻煩。

踩坑不完全統計

1. 多個Laravel 應用數據庫連接錯亂?

來自文章: 大家有沒有遇到多個應用中數據庫連接錯亂問題?

『多個應用中數據庫連接錯亂。同事無意中發現,在多個基於Laravel 的Web 應用中,當應用A進行一個長時間操作時(PHP 會運行超過30s+),在這期間,在應用B 中進行數據庫操作時, B應用會連接到A 應用中的數據庫,而非B 的數據庫。 』

在此貼中,作者細緻地做了各種分析,估計也是花了不少時間在Debug 這個問題,最後原因是Windows 下的.env 沒加載上。

2. Lavarel 應用突然無法登錄?

來自文章: Laravel登錄報錯Crypt : The Mac is invalid

用lavarel 框架寫的項目,今天登陸突然提示“The MAC is invalid.” 有沒有人遇到過這種情況?

最後原因是Windows 下的.env 沒加載上,導致系統底層的加密解密功能出錯。

3. Laravel 不支持高並發?

來自文章: Laravel不支持高並發?

我在用$.post 刷一個url 的時候(用鼠標點按鈕觸發,大概一秒鐘3、4次吧),按這個速度,大概每隔個十幾二十次,就會報一個500錯誤: Whoops, looks like something went wrong.沒有更具體的錯誤提示了。

一個神鬼莫測的問題,讓一個即使是十幾年開發經驗的老鳥,也栽坑里。

4. .env 不支持中文?

來自: 關於Laravel的.env配置不顯示的問題

在使用laravel 開發的過程中,我把項目名稱放入了.env 配置文件裡面再用env() 方法調用,發現三個中文的情況下只能返回default 值。

最後作者的答復是:『在Mac 上能正常,Windows上三個字不能顯示。 』

5. Mac 環境也不行?

來自: 一個小坑提醒:某個Class或某個Trait突然找不到

“我Mac 本地沒問題啊!”
“但是為什麼Linux 服務器上報這個錯啊???”
“太詭異了,這怎麼查?”

上面幾個例子講的都是坑爹的Windows 開發環境下的BUG。這個例子中,@lijinma 金馬的同事很不幸的踩了Mac 的坑,金馬同學很大方的分享了出來,詳細的解說了這個坑出現的原因,並且也提供了解決方案。

但是其實,最好的解決方案應該是:在一開始開發的時候,就是用Homestead。

為什麼集成環境不好?

如果你使用集成環境,或者自己部署的本機Windows/ Mac 開發環境,咱們先來看看有可能導致問題出現的變量有多少:

  • 系統變量Mac , 不同版本的Mac 系統,如Mac OS X Public , Mac OS X 10.0 Cheetah,Mac OS X 10.4 Tiger, Mac OS X 10.6 Snow Leopard;
  • 系統變量Windows,不同版本的Windows 系統,如Windows Vista, Windows 7, Windows 8, Windows 10 等;
  • PHP 的不同版本,Mac 自帶的PHP 閹割版,WAMP 的定製版等...
  • MySQL 的不同版本;
  • 系統下的其他軟件有時也會影響集成環境的使用(防火牆,系統補丁...)
  • 如果是團隊開發的話,還有你的環境和你隊友的環境... OMG ...

以上這些維度搭配起來,會讓複雜度到達非常恐怖的程度,會出現這些神鬼莫測的問題,真是一點都不奇怪。事實上,即使是現在,我每每回想起那些扯著頭髮抓狂的日子,多麼的不堪回首的歲月啊。

也有有些同學會說,『麼事麼事,這些對我來說都不難』。可是你仔細想想,熟悉這些Bug 的意義在哪?這本來就是一條錯的路,即使你能走的再遠。

為什麼說這是一條錯的路?

因為使用集成環境,或者各種與『生產環境』不同的開發環境,都會面臨以下一個巨大的問題:

你上線的代碼,有可能無法工作。

就如這個例子一個小坑提醒:某個Class或某個Trait突然找不到,他在Mac下代碼工作得好好的,放到Linux服務器下卻無法工作。有時候不止是系統問題,不同版本,如MySQL 5.6 和5.7 差別就挺大,PHP 5.6 和PHP 7 也經常出現代碼不兼容,再加上你使用Memached, Redis....。

結語

Homestead 是一種生活方式,請把這篇文章發給你身邊的Laravel 同志看,讓他們一起來使用Homestead。下次有新手問你可不可以不同Homestead 的話,也可以讓他先看看這篇文章。

人生苦短,請使用Homestead

What do you think?

Written by marketer

blank

增值電信業務許可證-互聯網信息服務業務經營許可證(ICP許可證)

blank

【冬至乾貨】教你如何玩轉京東內容營銷?