J'ai un problème très étrange.
Mon projet Django est exécuté à Heroku et utilise S3 pour stocker mes ressources statiques.
Je voulais utiliser les variables d'environnement Heroku en les configurant comme suit:
heroku config:add AWS_S3_TOKEN=my_s3_token
heroku config:add AWS_S3_SECRET=my_s3_secret
Et les utiliser avec le module os de python:
import os
token = os.getenv("AWS_S3_TOKEN")
secret = os.getenv("AWS_S3_SECRET")
Mais heroku continue de me jeter l'erreur suivante:
NoAuthHandlerFound: No handler was ready to authenticate. 1 handlers were checked. ["HmacAuthV1Handler"] Check your credentials
Donc, j'ai fini par écrire ces paramètres dans mon fichier settings.py et ça fonctionne bien
Pourquoi cela arrive-t-il?
Si je cours
heroku config
Je peux voir toutes mes variables définies et si je le fais
heroku run python manage.py shell
et alors
import os
print os.getenv("AWS_S3_TOKEN")
Par exemple, il affiche la valeur de la variable.
aucun indice sur ce ???
Merci d'avance
Réponses:
0 pour la réponse № 1Les variables d'environnement de l'application ne sont généralement pasdisponibles pendant que Heroku compile le slug et configure l’application, elles ne sont disponibles que lorsque l’application est en cours d’exécution. collectstatic
dans le cadre de la compilation slug, ce qui explique probablement pourquoi vous voyez cette erreur.
Vous pouvez rendre les variables d'environnement disponibles lors de la compilation en activant une fonctionnalité de Heroku Labs:
heroku labs:enable user-env-compile
Il y a plus d’informations dans cet article du centre de développement Heroku: https://devcenter.heroku.com/articles/labs-user-env-compile
1 pour la réponse № 2
Je ne suis pas familier avec python ou Django, mais je suis curieux.
Si vous essayez votre authentification avec des chaînes vides, obtenez-vous la même erreur?
Si oui, alors je soupçonne que c’est à propos de quand vous faites cette danse d'authentification. Quand le faites-vous? Au moment de la compilation ou à l'exécution? (Si au moment de la compilation, regardez ce)