指尖上的记忆指尖上的记忆
首页
  • 基础
  • Laravel框架
  • Symfony框架
  • 基础
  • Gin框架
  • 基础
  • Spring框架
  • 命令
  • Nginx
  • Ai
  • Deploy
  • Docker
  • K8s
  • Micro
  • RabbitMQ
  • Mysql
  • PostgreSsql
  • Redis
  • MongoDb
  • Html
  • Js
  • 前端
  • 后端
  • Git
  • 知识扫盲
  • Golang
🌟 gitHub
首页
  • 基础
  • Laravel框架
  • Symfony框架
  • 基础
  • Gin框架
  • 基础
  • Spring框架
  • 命令
  • Nginx
  • Ai
  • Deploy
  • Docker
  • K8s
  • Micro
  • RabbitMQ
  • Mysql
  • PostgreSsql
  • Redis
  • MongoDb
  • Html
  • Js
  • 前端
  • 后端
  • Git
  • 知识扫盲
  • Golang
🌟 gitHub

symfony5之环境变量和配置文件的关系:
最近在项目上线的时候,遇到个问题,配置环境变量,然年后针对不同环境变量,配置不同的数据库参数

关于symfony5的环境变量配置文件的一些注意事项:

1. .env 是默认配置,默认 .env中的APP_ENV=dev
  
2. .env.local 是用来覆盖 .env 中的配置信息的,并且默认 .env.local 中的 APP_ENV=dev,说明当前运行环境是 dev 环境,这里有个问题,可能指定了 dev, 但是并没有一个叫 .env.dev的配置文件,那么这个 .env.local 配置文件就会起到 .env.dev 的作用,然后 对于 services_dev.yaml 也是生效的。

我分析了一下原因,执行下面的命令可以看到,由于配置了 APP_ENV=dev,那么程序回去找这个环境变量,但是没有找到.env.dev相关的配置,那么还是用 .env.local
执行:php bin/console debug:dotenv
 * ⨯ .env.local.php
 * ⨯ .env.dev.local
 * ⨯ .env.dev
 * ✓ .env.local
 * ✓ .env

其实 APP_ENV 可以使任何名字,比如我写成 APP_ENV=tt,执行命令以后,就会有下面的效果,找不到.env.tt相关的配置,那么还是用 .env.local
 * ⨯ .env.local.php
 * ⨯ .env.tt.local
 * ⨯ .env.tt
 * ✓ .env.local
 * ✓ .env
  
3. 如果既在 .env.local 中配置了 APP_ENV=staging, 又有 .env.staging,那么执行命令以后,就会有下面的效果,会发现找到了 .env.staging,那么就会加载这里面的配置
root@k8s:~/code/test$ php bin/console debug:dotenv

Dotenv Variables & Files
========================

Scanned Files (in descending priority)
--------------------------------------

 * ⨯ .env.local.php
 * ⨯ .env.staging.local
 * ✓ .env.staging
 * ✓ .env.local
 * ✓ .env

Variables
---------

 ------------------------- ------------------------------------------------------------------------------ ----------------------------------- ----------------------------------- ----------------------------------- 
  Variable                  Value                                                                          .env.staging                        .env.local                          .env                               
 ------------------------- ------------------------------------------------------------------------------ ----------------------------------- ----------------------------------- ----------------------------------- 
  test_DOMAIN            test.web.test                                                               test.web.test                    test.web.test                                                       
  test_SCHEME            http                                                                           http                                http                                                                   
  APP_ENV                   staging                                                                        staging                             staging                             dev                                
  APP_SECRET                ThisTokenIsNotSoSecretChangeIt                                                 ThisTokenIsNotSoSecretChangeIt...   ThisTokenIsNotSoSecretChangeIt...   d6edd2e553f701556efbea65e8d868...  
  DATABASE_URL              mysql://root:123456@127.0.0.1:3306/test?serverVersion=8.0&charset=utf8mb4   mysql://root:123456@127.0.0.1:...   mysql://root:123456@127.0.0.1:...   mysql://app:!ChangeMe!@127.0.0...  
  FFMPEG_BINARY_PATH        /usr/bin/ffmpeg                                                                /usr/bin/ffmpeg                     /usr/bin/ffmpeg                                                        
  FFPROBE_BINARY_PATH       /usr/bin/ffprobe                                                               /usr/bin/ffprobe                    /usr/bin/ffprobe                                                       
  IDP_SCHEME                http                                                                           http                                http                                                                   
  IDP_URL                   duo.login.test                                                                duo.login.test                     duo.login.test                                                        
  MAILER_DSN                smtp://localhost:1025                                                          smtp://localhost:1025               smtp://localhost:1025               null://null                        
  MESSENGER_TRANSPORT_DSN   redis://localhost:6379/messages                                                redis://localhost:6379/message...   redis://localhost:6379/message...   doctrine://default?auto_setup=...  
  SSO_SERVICE               test                                                                        test                             test                                                                
  USER_LOGIN_AUTHORITY      test                                                                        test                             test                             test                            
  USER_LOGIN_KEY            test                                                                        test                             test                             test                            
 ------------------------- ------------------------------------------------------------------------------ ----------------------------------- ----------------------------------- ----------------------------------- 

 // Note real values might be different between web and CLI. 


注意一个问题: .env.staging 中的 APP_ENV 也要配置成 staging,不能配置成其它的值,否则又会继续找定义的那个环境变量
  
4. 我在 config 下新建了 services_staging.yaml 文件(此时的 APP_ENV=staging,会调用这里面的配置),用来覆盖 services.yaml中的某些配置,但是运行起来没有生效,我想会不会有缓存,于是我执行下面的清缓存命令后 再执行 配置才生效

 root@k8s:~/code/test$ php bin/console cache:clear

 // Clearing the cache for the prod2 environment with debug true                                                        

                                                                                                                        
 [OK] Cache for the "prod2" environment (debug=true) was successfully cleared.                                          
                                                                                                                          
5. 实际使用,一般会配置  .env.local .env.staging .env.prod .env.test