Une note qui est devenue folle lorsque j'ai transféré l'infrastructure exécutant Django de GKE vers GAE
J'ai utilisé un module appelé django-storages pour télécharger sur GCS et obtenir l'URL via imageField. https://django-storages.readthedocs.io/en/latest/backends/gcloud.html?highlight=GS_DEFAULT_ACL#settings
Cependant, lorsque je suis passé à GAE, imageField est revenu vide. le téléchargement fonctionne, et lors de l'exécution de Django sur localhost ou GKE, cela fonctionne.
Si vous n'avez pas besoin de la période de validité de l'URL Tout ce que vous avez à faire est d'ajouter les éléments suivants aux paramètres
DEFAULT_FILE_STORAGE = 'storages.backends.gcloud.GoogleCloudStorage'
GS_BUCKET_NAME = 'yourbacketname'
GS_DEFAULT_ACL = 'publicRead' <=ajouter à
GAE n'a pas non plus envoyé de journal des erreurs au pilote de pile Parce que le statut lui-même était de 200
Étant donné que le système d'authentification est GAE, j'ai pensé qu'il n'y aurait aucun problème à accorder des privilèges d'administrateur de stockage au compte de service par défaut. Mais ça ne marche pas
Je ne peux pas m'en empêcher, j'ai donc suivi la source de django-storage
python3.6/site-packages/storages/backends/gcloud.py
def url(self, name):
"""
Return public url or a signed url for the Blob.
This DOES NOT check for existance of Blob - that makes codes too slow
for many use cases.
"""
name = self._normalize_name(clean_name(name))
blob = self.bucket.blob(self._encode_name(name))
if not self.custom_endpoint and self.default_acl == 'publicRead':
return blob.public_url
elif self.default_acl == 'publicRead':
return '{storage_base_url}/{quoted_name}'.format(
storage_base_url=self.custom_endpoint,
quoted_name=_quote(name, safe=b"/~"),
)
elif not self.custom_endpoint:
return blob.generate_signed_url(self.expiration)
else:
return blob.generate_signed_url(
expiration=self.expiration,
api_access_endpoint=self.custom_endpoint,
)
Si vous utilisez la fonction de débogage de GAE et répétez le déploiement et le débogage dans le navigateur
blob.generate_signed_url(self.expiration)
Cette fonction semble être un méchant
En fait, je lançais une erreur, mais depuis qu'elle a été écrasée, j'ai finalement trouvé la cause avec try sauf dans le débogage GAE
"you need a private key to sign credentials.the credentials you are currently using <class 'google.auth.compute_engine.credentials.Credentials'> just contains a token.
C'était une erreur d'authentification
C'est ennuyeux, donc je n'ai pas besoin d'informations d'identification dans l'URL self.default_acl == 'publicRead': J'ai l'impression d'avoir ajouté une constante aux paramètres pour la mettre dans la branche.
fatigué···
Si vous demandez plus tard au représentant On m'a dit: «C'est cool de refaire le seau».
Pleuré
Recommended Posts