Я пытаюсь подключиться к серверу 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`` также показывает, что '=' отсутствует как в загруженной виртуальной среде, так и без нее.
Как получить правильную строку в среде, чтобы я мог запустить работника?