Ich muss ein Pub/Sub-Ereignis in meiner Infrastruktur veröffentlichen. Also habe ich die Google Cloud-Hintergrundfunktion geschrieben, die bei topic scan-dead-locks abonniert wurde. Es wird Datenbank lesen und alle abgestürzten nicht geschlossenen Sperren für Dokumente freigeben. Diese Funktion sollte beispielsweise alle 20 Minuten periodisch ausgeführt werden. Wie ich untersucht habe, gibt es keine Möglichkeit, das Pub/Sub-Ereignis direkt durch den Cron-Dienst von App Engine auszulösen. Ich schrieb ein Python-Skript, das sollte das tun (verwendete Beispiele von App Engine), aber das letzte Problem ist, dass Bibliotheken zur Laufzeit nicht gefunden wurden. Also, ich habe diesen Fehler.Google Cloud App Engine Cron kann kein Python-Skript ausführen
Und diese Dateien.
app.yaml
runtime: python27
threadsafe: no
handlers:
- url: /trigger-scan-dead-locks
script: trigger-scan-dead-locks.py
login: admin
appengine_config.py
from google.appengine.ext import vendor
vendor.add('lib')
cron.yaml
cron:
- description: scan for dead locks and release locks
url: /trigger-scan-dead-locks
schedule: every 20 mins
trigger-scan-dead-locks.py
from apiclient import discovery
pubsub = discovery.build('pubsub', 'v1')
pubsub.projects().topics().publish(topic="scan-dead-locks").execute()
Beispiel von hier https://github.com/GoogleCloudPlatform/reliable-task-scheduling-compute-engine-sample genommen wurde. Vielleicht die allgemeine Frage, die das Problem lösen könnte, wie die Bibliotheken hier verwaltet (ich habe bereits Dokumentation gelesen, aber es war nicht wirklich hilfreich)? Und ich fand auch ein anderes Beispiel mit from google.cloud import pubsub
Bibliotheksdeklaration, aber es funktionierte auch wegen der fehlenden Bibliothek nicht.
Aber, alle Bibliotheken arbeiten, wenn ich sie nur installieren in lib Ordner? App-Engine unterstützt nicht wirklich viele Bibliotheken, und Informationen über sie sind etwas fragmentiert. – QuestionAndAnswer
App Engine ist eine Sandbox. Sie können keine Bibliothek in das Projekt einfügen. Aber Sie können die meisten der sicheren setzen. Wenn eine Bibliothek nicht in GAE enthalten ist und nicht als eine der Bibliotheken von Drittanbietern angeboten wird, die Sie in app.yaml aufnehmen können, müssen Sie sie wie oben zum Projekt hinzufügen. – GAEfan
Klingt wie ein Hack. – QuestionAndAnswer