[分享] 剛學習laravel對我來說的代價 - 討論區

[分享] 剛學習laravel對我來說的代價

文章瀏覽次數 38 文章回覆數 3

特種兵

特種兵圖像(預設)

2021-04-04 10:50:01

From:1.161.142.112

這幾天因為公司有個新專案需要使用 laravel 框架

前陣子我都是負責內部系統與其他業務,一直沒有時間研究與學習 laravel

倒是因為這個平臺,另外兩位伙伴已經很熟悉 laravel 了,所以我要加油一下

我就拿自己家的 gaga.tw 主機開始研究,一邊看書一邊查資料

先南安裝 laravel 時新版的 4.x 至少需要 php 7 以上的版本

我的主機是 debian 9 只能裝到 php 5.x, 想起朋友之前說想在我的主機弄個教學網站,希望我把 php 更新到 7

雖然可以手動加入 apt 站點安裝 php 7.4 但想想 debian 9 也舊了,乾脆就更新到 10

不過在 debian 10 的 php 只能裝到 7.3 其實也夠用了

順利安裝好 laravel 後

當然就先從最熟悉的資料庫開始研究

因為 laravel 的資料庫是 orm 框架,這時候的我突然連建立資料表都不會了

看了資料,寫好新增資料表的程式後跑 migrate 看看

告訴我沒有 pdo 可以用,到 php.ini 打開也無效

這時候開始懷疑 nginx 對 php 這邊的設定問題,就是沒吃到設定。

想想自己用了多年的 nginx 其實對它也很不熟,那時設定好就沒再動了

上次要架個虛擬內部系統也一直卡在 .htaccess 那邊,顯然 nginx 對我來說沒有明顯好處,加上公司都用 apache 所以乾脆把 web server 由 nginx 換成 apache 好了

裝好後發現 virtual host 一直有問題,從下午弄到晚上,設定和資料翻爛還是一樣不行

最後終於發現又是 firefox cache 把我給害了,設定早就沒問題了,只是瀏覽器 cache 讓我一直被導向錯的頁面,我以為設定哪裡不對,看半天看不出問題

好吧,沒問題了就好

再回到 php 這邊還是有問題,看了一下自己系統裡面有 php 5, 7.0, 7.3 等等有點亂了,就把所有 php + mariadb 全部刪掉裝最新的就好

終於 migrate 可以動了

但因為只是測試的 migrate 而已,所以實際上資料表的建立還沒寫好

修改了程式後跑 migrate 後告訴我資料表已經存在

我就想那就重建,反正我目前只有這張表,就下 refresh 結果表還是在那邊

我就想說,反正這個 laravel 是做實驗,而且只有一張練習的表,那就 fresh 全部刪乾淨再重新 migrate 就好了

聽到硬碟跑了一下,心理開始有不祥的感覺,只是刪個表需要跑5到10秒嗎

還是安慰自己,沒事,有跑就是有在刪,可能電腦硬碟老舊了,大概該換了吧。

進資料庫看一下,猛然發現只剩兩個表,就是 migrations 跟測試的表

這時候呆了3秒鐘就想到,完蛋了,因為測試時是想說乾脆使用 laravel 把檔案下載平臺整個重寫,所以設定的資料庫是同一個

話說那天看到之前規劃的新頁面,居然已經是三四年前的事了,時間真的過得好快,當時就想重寫,但一直沒去動

這次藉由學習 laravel 就當作練習好了,反正寫在另外一個 dns 裡面不會影響原本的網站

查了一下 fresh 是會先刪除資料庫裡的所有資料表,我就知道發生什麼事了

花了三分鐘查救回的方法,覺得不太現實,還是從自己的備份下手比較實在

因為想趕快把資料救回來,這時候又做錯一件事

就是把備份行動碟掛起來,把整個 mysql 的資料夾複製過去蓋掉就好了

但其實這是不好的做法,因為出事情的只是我自己的檔案下載平臺資料庫,跟其他使用者沒關係,他們的資料庫都是正常的

我的備份是凌晨,所以要是今早有新資料進來的就會被我蓋成舊資料不見

其實應該只針對檔案下載平臺的資料庫去處理就好,可能那時有點慌吧

例如把備份 dump 出來的資料庫塞進去這樣就好了

因為我的備份是有各別 dump 資料庫也有整個 mysql 的資料夾備份的

不過已經蓋掉了整個 mysql 資料夾才想到,好吧,下次會記得。那就進資料庫看一下,看到資料表都在就放心了

想說連線檔案下載平臺看一下,結果看到一大堆資料庫的警告,進資料庫查詢資料表的內容居然告訴我資料表不存在,可是明明就有看到啊

這時候又緊張了起來,如果備份也不能用該怎麼辦呀

好險查到了 innoDB 模式如果蓋掉整個資料夾後必須刪掉 ib_logfile 檔並重開服務才會正常

果然整個正常了,大大鬆了口氣才敢去吃早餐

吃完早餐,第一件事就是把 laravel 練習的 migrate 資料庫改成另一個資料庫,這樣不管怎麼弄都不會影響原本的資料了

說真的,當十太大意了,才間接造成這些不良後果

總之,這兩天本來想努力學習 laravel 結果倒是稿了一大堆危險的麻煩事出來,由這些事再次告訴我們,備份有多重要啊
※最後更新時間:2021-04-04 10:51:10 From:1.161.142.112 By:特種兵
※最後更新時間:2021-04-05 09:20:20 From:1.161.142.112 By:特種兵

留言

#1

特種兵

特種兵圖像(預設)

2021-04-04 10:53:02

From:1.161.142.112

其實前幾年剛開始規劃NVDA平臺時是有接觸laravel的,
但因為實際開發不是我,所以當時只碰了一些關於資料庫的部分
過了幾年也都忘了,所以必須重學

#2

阿慶

阿慶圖像

2021-04-06 09:09:56

From:211.23.21.202

不管事新專案或者自己測試用的,只要是新的,我都一定弄個乾淨的資料庫給它
我之前遇到的是,跑 migrate 讓資料庫裏面新舊資料混再一起
所以之後想幹嘛都先獨立出來比較保險

然後其實如果你要用原有的資料庫,就不用另外寫 migration 了
只要寫好 model 就能直接用

更正一下,文章提到的 4.x 應該是 Laravel Installer 自己的版本
而 Laravel Framework 框架本身,現在最新版是 8.35

#3

特種兵

特種兵圖像(預設)

2021-04-06 11:48:36

From:211.23.21.202

但是我的資料表有重新規劃過了,以前的架構不好
現在做了幾個案子後,回頭來看,當時規劃的太草率了。