php – Laradock – 使用 crontab 自動執行會出現 exec: composer: not found 的問題

Laravel 7 我寫了一隻 command,透過 schedule 註冊每個小時都要跑這隻程式

透過指令

確實可以執行如 “git pull”, “composer install”, “php artisan optimize”, “npm install” …… 但是透過 crontab 卻會異常,顯示 “exec: composer: not found” 找不到指令的問題。以下兩種方法

如果是還沒 Build 專案

首先 Laradock 的專案資料夾會看到 workspace/crontab/laradock,已經寫好了每分鐘執行 php artisan,把它註解掉,因為這個身份是 “laradock”,我們要使用的是 “root”

接著跑起所需要的環境

進入 workspace 修改 crontab

添加這行

這樣就能使用 root 身份執行 schedule 了。

如果已經 Build

註腳掉原本使用者 laradock 的 crontab

增加 root 的 crontab

這樣就可以了。

如果有用到 Git Pull ,因為是自動化的關係,因此要使用 ssh ,請參考這篇網友分享的文章,設定不需要打帳號密碼的方式。

php – 將日期時間轉換為 Mongo ObjectId

最近在 Laravel 開發使用 MongoDB 做時間區間的篩選。

因為 Mongo 預設的 _id 具有時間戳記,因此篩選某個時間區段,可以直接透過 _id 做取得。那問題是,如何把時間轉換為 _id 格式呢?以下程式碼提供參考

那麼 Laravel 就可以這樣比對

php – Composer – 從 GitHub (VCS) 的 Repository 讀取套件

有個狀況是這樣:我們在 GitHub 修改了第三方套件,也 Pull Request 給作者,但作者還沒有 Merge 回去。這時候我們專案又要使用該怎麼辦?

解決方式:

改用自己的 GitHub Repository 即可。

舉例流程,以下示範修改第三方套件 php-simple-html-dom-parser

  • 我們從來源 sunra/php-simple-html-dom-parser fork 一份到自己的 repository 如 fdjkgh580/php-simple-html-dom-parser
  • 在自己的 repository fdjkgh580/php-simple-html-dom-parser 開一個分支命名為 update-php7.4
  • 開始修改程式碼並提交到該分支 update-php7.4
  • 在 composer.json 改寫。這裡要注意,repository 指定我們 fork 過來的位置;require 改為我們自訂的分支名稱,官方提到會成為這種格式 dev-* 因此要寫成 dev-update-php7.4,但套件名稱不要更改
  • 沒有裝過就 composer install ;已經裝過原本第三方來源,就用 composer update 換成自己的 repository。

上面發生什麼事?

套件 sunra/php-simple-html-dom-parser 本來應該要從第三方來源 sunra/php-simple-html-dom-parser 下載,經過 composer.json 替換後,安裝或更新時,會先檢查是否在 composer.json 定義過 repository。那因為我們定義過了,因此 composer 將原本應該要連去 sunra 的 repository 改成 fdjkgh580 的 repository。

參考官方文件:https://getcomposer.org/doc/05-repositories.md#vcs

Laravel – Webpack – 使用 Laravel-mix 在 Build 的時間太長的解法

目前在 Laravel-mix 5.4 (package.json 找得到) 下指令 npm run dev 會跑上好幾分鐘,解決這個辦法可以在 webpack.mix.json 加入已下指令,運行飛快。

參考來源:https://github.com/JeffreyWay/laravel-mix/issues/287JeffreyWay/laravel-mix#287 (comment)

Docker – Laradock – 快速安裝筆記

事前

以下示範 Nginx, MySQL, phpMyAdmin, PHP, Laravel

期望的架構

  • myProject (這是你自訂的專案名稱)
    • www (放置 Laravel 的地方)
    • laradock (你的專案需要的 Laradock 相關檔案)

也就是一個專案會配置一個 laradock 路徑,例如

  • A – project
    • www
    • laradock
  • B – project
    • www
    • laradock

這樣劃分的優點是每個專案都有專屬的環境,缺點就是你要寫不同專案就要切換不同的 Laradock。

開始步驟

下載 docker

進入專案資料夾後

下載下來的檔案會放在路徑 laradock

建立 www

這是我們準備存放 laravel 的路徑

編輯設定

修改如

檢查設定 php my admin

確認 laradock/.env 關於 MySQL 的相關設定,這些資料我們稍後會用到

Docker 修改 Nginx 設定

修改為

啟動 Docker Image 為 Container

*停止運行可下指令 docker-compose down

進入工作區域

在 workspace 內下載 Laravel

注意我們建立的目錄使用 .

權限修改

嘗試訪問

http://localhost:8000

讓 Laravel 連線 MySQL

修改如下

存檔後接著

運行資料庫遷移如果正常運作就沒問題囉!

訪問 phpMyAdmin

http://localhost:8080

我們可以使用這項設定進入

如果要使用用戶 root 登入,那麼密碼是MySQL 設定中的 “root”。