1

我有一个非常奇怪的问题。

我有我的 django 项目在 Heroku 中运行,使用 S3 来存储我的静态资产。

我想通过如下设置来使用 Heroku 环境变量:

heroku config:add AWS_S3_TOKEN=my_s3_token
heroku config:add AWS_S3_SECRET=my_s3_secret

并将它们与 python 的 os 模块一起使用:

import os

token = os.getenv('AWS_S3_TOKEN')
secret = os.getenv('AWS_S3_SECRET')

但是heroku不断向我抛出以下错误:

NoAuthHandlerFound: No handler was ready to authenticate. 1 handlers were checked. ['HmacAuthV1Handler'] Check your credentials

所以,我最终在我的 settings.py 文件中编写了这些参数,它工作正常

为什么会这样?

如果我跑

heroku config

我可以看到我所有设置的变量,如果我这样做了

heroku run python manage.py shell

进而

import os
print os.getenv('AWS_S3_TOKEN')

例如,它打印变量的值。

有什么线索吗???

先感谢您

4

2 回答 2

1

我不熟悉 python 或 Django,但我很好奇。

如果您尝试使用空白字符串进行身份验证,您会得到同样的错误吗?

如果是这样,那么我怀疑这与您何时进行身份验证有关。你什么时候做?在编译时,还是在运行时?(如果在编译时,看看这个

于 2013-06-27T12:21:54.870 回答
0

当 Heroku 编译 slug 和设置应用程序时,应用程序的环境变量通常不可用,它们只有在应用程序运行时才可用。对于 Django 应用程序,Heroku 将collectstatic作为 slug 编译的一部分运行,这可能就是您看到此错误的原因。

您可以通过启用 Heroku Labs 功能使环境变量在编译期间可用:

heroku labs:enable user-env-compile

这篇 Heroku 开发中心文章中有更多信息:https ://devcenter.heroku.com/articles/labs-user-env-compile

于 2013-06-27T12:29:04.620 回答