[PYTHON] GAE & GCS & Django mit leerer Bild-URL

Überblick

Eine Notiz, die verrückt wurde, als ich die Infrastruktur mit Django von GKE auf GAE übertrug

Ich habe ein Modul namens django-storages verwendet, um es auf GCS hochzuladen und die URL über imageField abzurufen. https://django-storages.readthedocs.io/en/latest/backends/gcloud.html?highlight=GS_DEFAULT_ACL#settings

Als ich jedoch zu GAE wechselte, war imageField wieder leer. Das Hochladen funktioniert, und wenn Django auf localhost oder GKE ausgeführt wird, funktioniert es.

Fazit

Wenn Sie den Gültigkeitszeitraum der URL nicht benötigen Sie müssen lediglich Folgendes zu den Einstellungen hinzufügen

DEFAULT_FILE_STORAGE = 'storages.backends.gcloud.GoogleCloudStorage'
GS_BUCKET_NAME = 'yourbacketname'
GS_DEFAULT_ACL = 'publicRead' <=hinzufügen

Pfad / Ursache verfolgen

GAE hat auch kein Fehlerprotokoll an den Stapeltreiber gesendet Weil der Status selbst 200 war

Da das Authentifizierungssystem GAE ist, dachte ich, dass es kein Problem geben würde, dem Standarddienstkonto Speicheradministratorrechte zu erteilen. Aber es funktioniert nicht

Ich kann nicht anders, also bin ich der Quelle des Django-Speichers gefolgt

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,
            )

Wenn Sie die Bereitstellung und das Debuggen im Browser mithilfe der Debug-Funktion von GAE wiederholen

blob.generate_signed_url(self.expiration)

Diese Funktion scheint ein Bösewicht zu sein

Eigentlich habe ich einen Fehler geworfen, aber da er zerstört wurde, habe ich die Ursache schließlich mit try gefunden, außer beim GAE-Debugging

"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.

Es war ein Authentifizierungsfehler

Es ist ärgerlich, daher benötige ich keine Anmeldeinformationen in der URL self.default_acl == 'publicRead': Es scheint, als hätte ich den Einstellungen eine Konstante hinzugefügt, um sie in den Zweig zu setzen.

müde···

Wenn Sie den Vertreter später fragen Mir wurde gesagt: "Es ist cool, den Eimer neu zu gestalten."

Hat geweint

Recommended Posts

GAE & GCS & Django mit leerer Bild-URL
Der heutige Python-Fehler: Das Bild ist leer
Was ist im Docker Python-Image pfeifend?
Holen Sie sich die Bild-URL mithilfe der Flickr-API in Python
[Django] Fehler, wenn SlugField in .filter () angegeben ist
Entwerfen von URL-Schemata und Erstellen von Vorlagen in Django
Geben Sie die Ansichts-URL in der Django-Vorlage an
Was ist Django? .. ..
Modell in Django
Form in Django
Django URL-Einstellungen
Code, der die Ansichtsnamen von URL-Resolvern in Django auflistet
URL-Codierungsprozess in der Cloud Storage-Bibliothek von GAE / py