Heroku,配置变量和使用S3的django问题

时间:2013-06-25 23:38:08

标签: django heroku amazon-s3

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

我让我的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')

例如,它打印变量的值。

有关这个的任何线索???

提前谢谢

2 个答案:

答案 0 :(得分:1)

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

如果您尝试使用空白字符串进行身份验证,是否会出现相同的错误?

如果是这样,那么我怀疑它是你正在进行这种认证舞蹈时。你什么时候做的?在编译时,还是在运行时? (如果在编译时,请查看this

答案 1 :(得分: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