为什么我可以在代码的一部分检索环境变量,而不能在另一部分检索



我已经将一个API令牌作为环境变量存储在我的wsgi文件中。我可以在Django应用程序的一个实例中检索它,但不能在另一个实例。

我能够在我的管理员中的save_model操作中成功地使用令牌。当我在管理命令中使用几乎相同的代码时,我会得到一个身份验证错误。

我的wsgi.py文件:

import os    
import sys
from django.core.wsgi import get_wsgi_application
os.environ['SLACK_TOKEN'] = '12344567890qazxswedcvfrtgbnhyujmkiolp'
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myapp.settings')
application = get_wsgi_application()

工作管理员.py用法:

import os
from slacker import Slacker
def save_model(self, request, obj, form, change):
if obj.condition == True:
super().save_model(request, obj, form, change)
token = os.getenv('SLACK_TOKEN')
slack = Slacker(token)
slack.chat.post_message('#test-channel', 'mymessage')

不工作的管理命令用法:

import os
from slacker import Slacker
def handle(self, *args, **options):
try:
#test condition
except:
token = os.getenv('SLACK_TOKEN')
slack = Slacker(token)
slack.chat.post_message('#newsflow-test', 'mymessage')

故障排除表明env变量没有加载——当我运行管理命令或试图在Django shell中检索令牌时,print(token(会产生None响应。

wsgi.py由Python应用程序服务器导入,例如gunicorn。管理命令直接执行,并绕过导入wsgi.py。您应该使用一些机制,例如django-dotenv,从manage.py脚本和wsgi.py应用程序初始值设定项中的.env文件加载环境变量。

最新更新