laravel – 在 Schedule 中無法正常觸發 commands

最近有個新專案,在 schedule 中寫了每分鐘的排程測試,卻發現無論如何,command 埋了 log 都無法正常觸發 command ,但在 \App\Console\Kernel::schedule 的 log 卻可以正常觸發。

後來才發現因為新專案使用了 php artisan down 進入 maintenance mode 維護模式,因此造成 『Schedule 正常觸發,但是裡面的 Command 無法觸發』的問題。官方文件只有提到停用 queued jobs 是會被停用的,原來 schedule 中的 command 也會無法。這點要注意。

ubuntu 強制更新網路時間

強制更新網路時間

sudo apt install ntpdate
sudo ntpdate time.stdtime.gov.tw

phpStorm – 如何讓註解符號出現在程式碼開頭

通常我們使用 command + / 會讓註解出現在當行的第一個欄位

是的,這個非常惱人,我習慣出現在文字的前面而不是第一個欄位。Mac 修改方法請到 Settings (command + ,) > Code Style > {你想修改的語言如 PHP} > Code Generation,取消 『Line Comment at the first column』並打勾 『Add a space at line comment start』

接著去 JavaScript 一樣的操作

再去 HTML 取消勾選 『Line Comment at the first column』

很可惜 Laravel 用的 Blade 目前並沒辦法實現,截至發文此時。不過只要游標放在 blade 的前後,再按下 command + / 就可以套用如 php or html 的註解模式。

例如游標在這裡不會真的被套用

但如果放在前後就能如期

Github – 使用 git push 使用 ssh key 免帳號密碼

cd ~/.ssh

# 查看底下是否有已存在的 id_rsa 或 id_rsa.pub
# 例如 laradock 會有預設,通常我會刪掉
# 如果你的系統有正在使用的記得備份
ls -al
rm id_rsa id_rsa.pub authorized_keys

# 填上你的辨識名稱如英文名稱或 email
ssh-keygen -t rsa -C "cary"
# 應該會看到產生的 key id_rsa 與 id_rsa.pub
ll

# 複製裡面的內容,等下要貼到 github
cat id_rsa.pub

前往 https://github.com/settings/keys 點擊 New SSH key

輸入後按下 Add SSH key

接著你會看到多了一欄位

測試看看是否順利連接

ssh -T git@github.com

在專案上的 repository 加上 ssh key

git remote set-url origin git@github.com:{你的帳號}/{你的 github 專案名稱}.git

# 初次設定的話記得要添加
git push --set-upstream origin master

這串 git@github.com:{你的帳號}/{你的 github 專案名稱}.git 可以在 github 這裡找到

接著嘗試 push 或 pull 就可以成功了!

Laradock 安裝 MySQL 出現:Different lower_case_table_names settings for server (‘2’) and data dictionary (‘0’).

網路上這篇有提到解法:
https://stackoverflow.com/questions/64146845/mysql-not-starting-in-a-docker-container-on-macos-after-docker-update

Mac 環境底下 (我的環境 13.0) 的硬碟儲存是大小寫不敏感,只要你沒有在硬碟上動過手腳 (網路有其他教學但適合用在新電腦或是另外開一顆硬碟),那麽就適合使用 lower_case_table_names=2 的設定,這也是 mysql 8 的預設設定,不建議再去調整成 0或 1。參考官方:https://dev.mysql.com/doc/refman/8.0/en/identifier-case-sensitivity.html

  • 0: Windows 或 macOS 不建議,因為使用敏感大小寫儲存與查詢
  • 1: 全部改成小寫寫入與比對
  • 2: 表和資料庫名稱使用 CREATE TABLE 或 CREATE DATABASE 語句中指定的字母大小寫儲存在硬碟上,但 MySQL 在查找時將它們轉換為小寫。比較名稱時不區分大小寫。適用於不區分大小寫的文件系統。InnoDB 資料表名稱和視圖名稱以小寫形式存儲,如 lower_case_table_names=1。

主要是把 Docker 的設定 gRPC Fuse 關閉。不過我嘗試關閉了以後,仍然會跳出這個問題。我看到網路有人提到把 docker 的 mount 出來的 mysql 儲存區刪掉,因此我找到了對應位置:

cd /Users/{這裡是你的 mac 使用者帳號}/.laradock/data/
rm -rf mysql # 刪掉整個 mysql 儲存區
docker-compose build --no-cache mysql
docker-compose up -d mysql

這樣就成功了!

造成的原因,我想可能是早期有安裝過 mysql 但是留了一些舊的系統格式在 mac 上,因為你 docker-compose down 並不會把 mount 到外部的內容刪除,因此殘留而造成與新版的格式衝突。

如果你想修改 lower_case_table_names

因為要避免與你之前生成的資料衝突,因此務必刪除後重啟。例如我將 lower_case_table_names=1,以下介紹步驟:

# 刪除 mysql 初始化過的儲存資料 (如果你有正式資料請匯出)
cd /Users/{這裡是你的 mac 使用者帳號}/.laradock/data/
rm -rf mysql # 刪掉整個 mysql 儲存區

# 專案底下打開你的 laradock 找到 mysql
vim laradock/mysql/my.cnf

# 在 [mysqld] 下方加入這行
lower_case_table_names=1

# 重新運行
docker-compose down mysql && 
  docker-compose build --no-cache mysql && 
  docker-compose up -d mysql

總之,你若要修改儲存與比對的大小寫方式,記得刪掉後重啟才能運行。