在 Laravel 的開發旅程中,我們經常面臨一個尷尬的階段:專案還沒大到需要導入複雜的 Kubernetes 或全套 CI/CD 自動化架構,但伺服器數量已經從 1 台變成 3 台、5 台。這時,我們常陷入「重複 SSH 登入、手動輸入指令」的無間地獄
最近在整理維運流程時,針對 Laravel Envoy 做了一次深度梳理,以下是幾個關鍵的技術疑問與實戰總結。
疑問一:有了 CI/CD,為什麼還要 Envoy?
這是一個非常實際的衝突。很多人認為「配置變更」理應走 CI/CD。
答案是:流程的「響應速度」與「適用場景」。
jack4689 發表在
痞客邦
留言(0)
人氣()
將資料庫從 MySQL 8.0 升級到了 8.4 LTS 版本,原本以為只是常規的基礎設施升級,沒想到卻迎來了長達半天的唯讀副本(Read Replica)同步延遲。作為一個追求效能的開發者,在面對 8GB RAM 的硬體限制與大量資料處理需求時,這次的教訓刻骨銘心。
一、 升級後的隱形殺手:innodb_change_buffering
在 MySQL 8.4 中,一個重大的改動是 innodb_change_buffering 的預設值從 all 被調整為 none。
這對效能影響巨大。原本在 8.0 中,InnoDB 會利用 Change Buffer 將二級索引(Secondary Index)的寫入操作暫存在記憶體中,再進行背景合併,這極大地優化了隨機 I/O。一旦改為 none,所有針對索引的寫入(INSERT/DELETE/UPDATE)都變成「即時隨機讀寫」。
在唯讀副本上,當大量 Binlog 湧入時,副本必須同步進行這些繁重的索引操作。對於 8GB RAM 的機器,Buffer Pool 命中率瞬間掉底,導致大量的 Page In/Out。
jack4689 發表在
痞客邦
留言(0)
人氣()
做網站功能,難免會有檔案上傳與下載的需求
像是匯出報表之類
過去都會簡單暴力用 readfile($file) 處理
但檔案太大(超過100mb) 就有可能載不下來,需要改成分段處理
在設定下載時,會設定一些 header... 這都照舊,不列出來
jack4689 發表在
痞客邦
留言(0)
人氣()
js 是 by reference 的模式
a = {};
b = {};
所以在 賦值後 (a=b),調整 b 的內容,a 也會跟著變
若要完全獨立,需借用 JSON 處理
jack4689 發表在
痞客邦
留言(0)
人氣()
當用 supervisor 去啟用 laravel octane 時,要留意 horizon 的設定
config/horizon.php
'defaults' => [
'supervisor-1' => [
'connection' => 'redis',
jack4689 發表在
痞客邦
留言(0)
人氣()
先前在用 Codeigniter 開發時,都習慣查詢結果轉成陣列 results_array, row_array,會是比較直覺處理的
改用 laravel 時,發現有 toArray的用法,不過常常爆錯
要用 toArray 是有限制的,還有輸出結果也是有限的!
toArray 要在查得到資料的情況下,才能使用!
若是 get() 回傳後,無資料會是 null。這時用 toArray 就會爆錯... 也不會輸出空陣列
jack4689 發表在
痞客邦
留言(0)
人氣()
在CI 推出新版後,想躍躍欲試,。大致上架構有參考到Laravel (不少地方
不過這次的新版多了一個public資料夾,而且index.php 不在根目錄!!!
http://localhost.ci4/public/index.php/home → http://localhost.ci4/home
看了不少篇教學都是教我們要多建.htaccess,或是把.htaccess, index.php,移到根目錄。找了大概快20篇文章,結論都差不多
索性依過去設定laravel, CI的作法,終於測出來,都不用建立額外檔案下的作法。
jack4689 發表在
痞客邦
留言(0)
人氣()
sudo supervisorctl status -- 取得列表
sudo supervisorctl (start | stop | restart ) name -- 開始 | 停止 | 重啟 指定的 supervisor
sudo supervisorctl (start | stop | restart ) name:* -- 若是 supervisor.ini 有設定 group,可直接針對 group 重啟,就不用一個個調整
jack4689 發表在
痞客邦
留言(0)
人氣()
1. 實作interface
2. 實作服務本身,並實現interface的func
可以寫兩個服務,一個測試用(TestRepoistory、一個正式用(PostRepository
有的以xxxService、有的xxxRepoistory 命名,小弟我是不太了解 這兩種概念上的差異
jack4689 發表在
痞客邦
留言(0)
人氣()
以往在一些好友名單,如果要找尋某個人就要一個一個看,懂電腦的會直接Ctrl+F
但對於不懂電腦的,就會先給個搜尋框+按鈕
要嘛針對搜尋的內容做post,整頁refresh,不然就是AJAX搜尋
總而言之就是要經過資料庫,於是找找能不能夠透過javascript 直接在頁面做搜尋,比較快也不會佔用到伺服器資源。
最後找到下面這篇 是用jquery寫的
jack4689 發表在
痞客邦
留言(0)
人氣()
最近php coding時剛好需要把兩個table的資料一起顯示在同一頁,並用分頁。在mysql的情況下,limit 只需代入起始index+要顯示的筆數,方便很多,比較好調整。但在sql server,沒有limit可用,除了top之外,好像只能在sql語法使用row_number()的方式,加入筆數限制,但不一樣的是代入的值,是要起始與結束index。
例:10筆做2分頁
mysql
limit 1, 5
limit 6, 5
jack4689 發表在
痞客邦
留言(0)
人氣()
初學者開新的新增頁面,欄位是設定varchar的話,通常code都是
$form->field($model, 'post_title')->textInput()
如果不想用text而是下拉式選單那要怎麼改了?
先把textInput()改成下面的code格式
dropDownList( 選項 , ['prompt' => ' 預設選項 ' ] )
jack4689 發表在
痞客邦
留言(0)
人氣()