Azure中Laravel扩缩容导致队列任务执行时dotenv变量返回null
Azure负载均衡Laravel多租户应用队列任务10%失败:SQL连接127.0.0.1异常(怀疑扩缩容导致)
环境信息
- PHP 8.0
- Laravel 8.83.23
- Azure负载均衡Web应用实例
- nginx:latest(数月前升级至PHP 8.0)
问题现象
我有一个部署在Azure负载均衡Web应用上的多租户应用,当前遇到的问题是:90%的队列任务可正常执行,但有10%会失败,仅队列任务出现该问题,所有请求均无异常。失败时具体报错为SQL连接异常(连接127.0.0.1失败)。目前暂未明确原因,但怀疑与Azure实例的扩缩容有关。
当前配置与排查情况
数据库连接配置
我通过中间件动态配置数据库连接,代码如下:
config()->set('database.connections.company', [ 'driver' => 'pgsql', 'url' => env('DATABASE_URL'), 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', '5432'), 'database' => $db_name, 'username' => env('DB_USERNAME', ''), 'password' => env('DB_PASSWORD', ''), 'charset' => 'utf8', 'prefix' => '', 'prefix_indexes' => true, 'schema' => 'public', 'sslmode' => env('DB_SSLMODE', 'prefer'), ]);
部署与缓存处理
我们通过CI/CD流程将.env文件复制到Azure服务器,启动脚本执行以下命令解决过之前的缓存镜像问题:
php artisan optimize:clear php artisan cache:clear
推测与尝试
我查阅资料后认为这可能是竞态条件导致的,推测执行失败任务的服务器未正确获取到.env文件,因此env()变量返回了默认值127.0.0.1。
曾尝试用Azure配置中的服务器属性存储环境变量,但并未解决问题。
提问
- 有没有人遇到过Azure上Laravel的此类扩缩容相关的队列任务问题?
- 有没有无状态的替代方案来存储这些配置信息?
内容的提问来源于stack exchange,提问作者Jaquarh
相关产品推荐
相关产品推荐

