gpt4 book ai didi

python - Azure 环境变量从键中删除最后一个字符 ('=' ),在连接到 Redis 的 Azure 缓存时给出 'invalid password'

转载 作者:可可西里 更新时间:2023-11-01 11:23:26 25 4
gpt4 key购买 nike

我正在尝试连接到 Azure Redis 服务器以用作 celery 队列。我可以从本地开发人员那里很好地连接到它。当我尝试通过 ssh 启动 celery Worker 时,代理 URL 会删除密码末尾的“=”,从而给出无效密码错误。

但是,从 Flask 应用程序运行的 celery 实例工作正常 - 我只是没有工作人员来完成任务。

我已经多次尝试重新生成 key ,看看是否得到了不以“=”结尾的 key 。

我打印连接字符串,并在本地开发中得到:

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

在 Azure 应用服务上我得到:

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

@ 之前缺少“=”。我已经四次检查应用程序设置中的 key 是否正确。

该代码与本地开发代码相同,可以按预期工作。

我将加载字符串的代码更改为

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

这解决了 celery Worker 的问题,但它导致实际的 Web 应用程序因密码错误而失败。无论如何,这似乎是一个阴暗且难以维护的修复。

对连接字符串进行硬编码可以解决这两个问题,但显然不是一个理想的解决方案。

出于某种原因,当我尝试从命令行运行命令时,Azure 应用程序服务会从环境变量中删除尾随的“=”,而不是从 Flask 应用程序看到的变量中删除。从环境变量中读取代码并使用“printenv”从 ssh 打印也会显示“=”在加载虚拟环境和未加载虚拟环境时都丢失。

如何将正确的字符串放入环境中以便启动工作程序?

最佳答案

实际上,可以看到 key 的长度是固定的44个字符。所以我的想法是在环境中设置一个带有附加固定长度字符(如 AAA)尾部的 key ,然后通过截取前 44 个字符来获取它。

例如,设置 REDIS_KEY=QfWOl8KFGuD7Q3PG1rvsD4igwLT5ZxTyIbhvO8TvpX0=AAA,然后在 Python 中获取它。

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

希望有帮助。

关于python - Azure 环境变量从键中删除最后一个字符 ('=' ),在连接到 Redis 的 Azure 缓存时给出 'invalid password',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56549725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com