Почему я могу получить переменную среды в одной части моего кода, а не в другой? - PullRequest
0 голосов
/ 02 ноября 2019

Я сохранил токен 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()

Рабочее использование admin.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 не загружается - print (token) не дает ответа, когда я запускаю команду управления или пытаюсь получить токен в Djangoоболочка.

1 Ответ

1 голос
/ 02 ноября 2019

wsgi.py импортируется вашим сервером приложений Python, например gunicorn. Команды управления выполняются напрямую и обходят импорт wsgi.py. Вам следует использовать некоторый механизм, например, django-dotenv для загрузки переменных окружения из файла .env как в вашем скрипте manage.py, так и в инициализаторе приложения wsgi.py.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...