【问题标题】:Issue with Heroku, configuration variables and django using S3使用 S3 的 Heroku、配置变量和 django 问题
【发布时间】:2013-06-25 23:38:07
【问题描述】:

我遇到了一个非常奇怪的问题。

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

例如,它打印变量的值。

这有什么线索???

提前谢谢你

【问题讨论】:

    标签: django heroku amazon-s3


    【解决方案1】:

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

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

    如果是这样,那么我怀疑它是关于何时您正在执行此身份验证舞蹈。你什么时候做?在编译时,还是在运行时? (如果在编译时,看this

    【讨论】:

      【解决方案2】:

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

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

      heroku labs:enable user-env-compile
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-06-03
        • 2015-04-17
        • 2014-03-08
        • 2014-03-14
        • 2017-01-22
        • 2017-08-20
        • 2019-02-05
        • 2019-08-05
        相关资源
        最近更新 更多