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文件中,环境变量的配置,最好都加上"",避免出现意外的灾难。

相关文章
相关标签/搜索