laravel項目之發布導致的BUG(環境變量問題)

本篇文章給大家帶來的內容是關于laravel項目之發布導致的BUG(環境變量問題)?,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

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文件中,環境變量的配置,最好都加上””,避免出現意外的災難。

? 版權聲明
THE END
喜歡就支持一下吧
點贊6 分享