Переменные среды Azure, удаляющие последний символ ('=') из ключа, дающего «неверный пароль» при подключении к кэшу Azure для повторного использования - PullRequest
0 голосов
/ 11 июня 2019

Я пытаюсь подключиться к серверу Azure Redis для использования в качестве очереди сельдерея. Я могу подключиться к нему просто из местного разработчика. Когда я пытаюсь запустить работника сельдерея через ssh, URL-адрес брокера сбрасывает символ «=» в конце пароля, сообщая об ошибке неверного пароля.

Однако экземпляр сельдерея, запущенный из приложения Flask, работает нормально - у меня просто нет работника для выполнения задачи.

Я несколько раз пытался регенерировать ключи, чтобы проверить, не получился ли у меня ключ, не заканчивающийся на '='.

Я печатаю строку подключения и в локальном устройстве получаю:

rediss://:{mykey[-3]}50=@{mysit}.redis.cache.windows.net:6380/

и в службе приложений Azure я получаю:

rediss://:{mykey[-2]}50@{mysit}.redis.cache.windows.net:6380/

с пропущенным '=' перед @. Я четыре раза проверил, что ключ правильный в настройках приложения.

Код идентичен локальному коду разработчика, который работает как задумано.

Я изменил код загрузки строки на

f"rediss://:{os.environ.get('REDIS_KEY')}=@$mysite$.redis.cache.windows.net:6380/0"

и это решило проблему для сельдерея, но это привело к тому, что в реальном веб-приложении произошла ошибка пароля. В любом случае это выглядит как тенистое и сложное в обслуживании исправление.

Жесткое кодирование строки соединения решает обе проблемы, но, очевидно, не является желательным решением.

По какой-то причине служба приложения Azure удаляет завершающий символ '=' из переменных среды, когда я пытаюсь запускать команды из командной строки, но не из переменных, которые видит приложение Flask. Считывание кода из переменных среды и печать из ssh с использованием `` printenv`` также показывает, что '=' отсутствует как в загруженной виртуальной среде, так и без нее.

Как получить правильную строку в среде, чтобы я мог запустить работника?

1 Ответ

0 голосов
/ 26 июня 2019

На самом деле вы можете видеть, что длина ключа фиксирована 44 символа.Поэтому моя идея состоит в том, чтобы установить ключ с хвостом дополнительных символов фиксированной длины, таких как AAA, в окружение, а затем получить его путем перехвата первых 44 символов.

Например, set REDIS_KEY=QfWOl8KFGuD7Q3PG1rvsD4igwLT5ZxTyIbhvO8TvpX0=AAA, затемполучить его на Python.

import os
key = os.environ.get('REDIS_KEY')[:44]
# 'QfWOl8KFGuD7Q3PG1rvsD4igwLT5ZxTyIbhvO8TvpX0='

Надеюсь, это поможет.

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