2013-06-25 55 views
1

我有一個很奇怪的問題。問題與Heroku,配置變量和Django使用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文件中,它w orks fine

這是爲什麼發生?

如果我運行

heroku config 

我可以看到我所有的seted變量,如果我做

heroku run python manage.py shell 

然後

import os 
print os.getenv('AWS_S3_TOKEN') 

例如,它打印變量的值。

任何線索在這?

預先感謝您

回答

0

當Heroku編譯slug並設置應用程序時,應用程序的環境變量通常不可用,它們只在應用程序運行時纔可用。對於Django應用程序,Heroku將運行collectstatic作爲slug編譯的一部分,這可能是您看到此錯誤的原因。

您可以通過啓用一個Heroku的實驗室功能使編譯過程中可用的環境變量:

heroku labs:enable user-env-compile 

有此Heroku的開發中心文章的詳細信息:https://devcenter.heroku.com/articles/labs-user-env-compile

+0

非常感謝 – israelord

1

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

如果您嘗試使用空白字符串進行身份驗證,是否會得到相同的錯誤?

如果是這樣,那麼我懷疑它是關於你正在做這種認證舞蹈。你什麼時候做?在編譯時,還是在運行時? (如果在編譯時,請看this

+0

非常感謝您! – israelord