You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

supervisor启动Celery后无法读取.env文件及firebase服务文件报错问题

根因分析

问题核心是supervisor启动进程时的默认运行环境与本地手动启动的环境存在两处差异:

  1. supervisor启动进程的默认工作目录不是你的项目根目录,所有相对路径寻址(包括.env文件、FCM服务账号文件)都会失败
  2. django-environ默认优先读取系统环境变量,若supervisor运行环境中已存在和.env同名的环境变量(哪怕值为空),会直接使用该空值而不会读取.env中你配置的有效值

解决方案

1. 修正supervisor配置

找到celery worker对应的supervisor配置文件(通常存放在/etc/supervisor/conf.d/目录下),新增两个配置项:

[program:celery-worker]
# 保留你原有配置(command、user、日志路径等)不变,新增以下两项
directory = /你的项目根目录绝对路径  # 替换为存放manage.py、.env的目录
environment = PYTHONPATH="/你的项目根目录绝对路径"

修改完成后执行命令更新配置并重启服务:
supervisorctl reread && supervisorctl update && supervisorctl restart celery-worker

2. 强制.env配置优先级(可选,若完成第一步仍有变量为空时操作)

修改settings.py中读取.env的代码,添加overwrite=True参数强制覆盖系统已存在的同名环境变量:

import environ

BASE_DIR = Path(__file__).resolve().parent.parent

env = environ.Env()
# 新增overwrite=True参数
environ.Env.read_env((BASE_DIR / '.env').as_posix(), overwrite=True)

3. 修复FCM文件找不到问题

两种方案二选一即可:

  • 方案一:初始化firebase时明确指定服务账号文件的绝对路径
import firebase_admin
from firebase_admin import credentials

# 替换为你的服务账号文件实际名称
cred = credentials.Certificate((BASE_DIR / 'fcm_service_account.json').as_posix())
firebase_admin.initialize_app(cred)
  • 方案二:在supervisor的environment配置项中新增服务账号路径配置
environment = PYTHONPATH="/你的项目根目录绝对路径",GOOGLE_APPLICATION_CREDENTIALS="/你的项目根目录绝对路径/fcm_service_account.json"

内容的提问来源于stack exchange,提问作者Amanur Rahman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 17:00:02