laravel項目一次發佈致使的BUG(環境變量問題)

laravel項目一次發佈致使的BUG

背景

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

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!*",而後一切恢復正常。code

建議.env文件中,環境變量的配置,最好都加上"",避免出現意外的災難。

相關文章
相關標籤/搜索