我正在使用Django 2.x和Celery 4.3.x
在我的Django应用程序中,我使用 dotenv 从.env
文件中提供环境变量并加载环境变量,我在manage.py
和wsgy.py
文件中有以下脚本
env_file = os.path.join(os.path.dirname(os.path.realpath(__file__)), '.env')
dotenv.read_dotenv(env_file)
环境变量具有 AWS 凭证anymail
插件使用SES发送邮件。
现在,我正在使用 Celery 任务发送电子邮件并从命令行运行 celery worker
celery -A myapp worker -l debug
工作线程正在运行,但在发送电子邮件时,它在芹菜任务中给出错误,如
ERROR/ForkPoolWorker-2] An error occurred (AccessDenied) when calling
the SendRawEmail operation: User `arn:aws:iam::user_id:user/my-laptop` is not
authorized to permorm this action...
似乎试图与笔记本电脑的用户连接,而不是使用.env
文件中定义的凭据。
如何使用.env
文件将环境文件服务器到 Celery 辅助角色?
通过在芹菜配置文件中加载环境变量来解决
celery.py
env_file = os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))), '.env')
dotenv.read_dotenv(env_file)
不确定如何使用dotenv执行此操作,但是我使用python解耦从一些芹菜任务中的.env
文件中提取参数。
from decouple import config
AUTH_USER = config('AUTH_USER')
AUTH_PASS = config('AUTH_PASS')