背景
laravel專案的某一次釋出後,專案中連線資料庫突然報錯,而用同樣的資料庫賬號密碼在機器上連線是可以的。
臨時解決方案
經過短暫時間的排查,沒找到原因,原資料庫密碼DB_PASSWORD=abcde#142!*
,修改資料庫密碼為DB_PASSWORD=abcde2019
後,恢復正常。
排查思路
變更密碼後,資料庫能正常連線,可見是密碼問題,同時同樣的密碼在專案中訪問資料庫失敗而在機器上可以訪問成功,可判斷是環境問題導致的密碼問題。
在專案中列印資料庫連線配置的日誌,如下:
Array
(
[driver] => mysql
[host] => xxx
[port] => xxx
[database] => xxx
[username] => xxx
[password] => abcde
[unix_socket] =>
[charset] => utf8mb4
[collation] => utf8mb4_unicode_ci
[prefix] =>
[strict] => 1
[engine] =>
)
可見密碼配置在env中為DB_PASSWORD=abcde#142!*
,但是在PHP程式碼中讀取的資料庫密碼配置為abcde
,可見#後面的內容程式碼中認為是註釋,從而忽略了。
繼續檢視jenkins釋出日誌,發現了有一段日誌輸出:
Package operations: 0 installs, 3 updates, 0 removals
- Updating vlucas/phpdotenv (v2.5.2 => v2.6.0): Downloading (connecting...)Downloading (0%) Downloading (15%)Downloading (100%)
釋出過程中,有一個依賴包的升級。
檢視vlucas/phpdotenv
的文件,看到以下說明:
Comments
You can comment your .env
file using the #
character. E.g.
# this is a comment
VAR="value" # comment
VAR=value # comment
解決方案
.env檔案中,對密碼欄位加上雙引號,如DB_PASSWORD="abcde#142!*"
,然後一切恢復正常。
建議.env檔案中,環境變數的配置,最好都加上"",避免出現意外的災難。
本作品採用《CC 協議》,轉載必須註明作者和本文連結