laravel項目的某一次發佈後,項目中鏈接數據庫忽然報錯,而用一樣的數據庫帳號密碼在機器上鍊接是能夠的。php
通過短暫時間的排查,沒找到緣由,原數據庫密碼DB_PASSWORD=abcde#142!*
,修改數據庫密碼爲DB_PASSWORD=abcde2019
後,恢復正常。mysql
變動密碼後,數據庫能正常鏈接,可見是密碼問題,同時一樣的密碼在項目中訪問數據庫失敗而在機器上能夠訪問成功,可判斷是環境問題致使的密碼問題。laravel
在項目中打印數據庫鏈接配置的日誌,以下:sql
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發佈日誌,發現了有一段日誌輸出:socket
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%)
發佈過程當中,有一個依賴包的升級。this
查看vlucas/phpdotenv
的文檔,看到如下說明:unix
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!*"
,而後一切恢復正常。code
建議.env文件中,環境變量的配置,最好都加上"",避免出現意外的災難。