2017-06-05 3 views
0

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

enter image description here

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.

Antwort

1

Klingt, als hätten Sie googleapiclient nicht in Ihrem Verzeichnis lib.

Paar Dinge:

1) versuchen from googleapiclient import discovery < - neuere Version

2) $ cd zu Ihrem Projektverzeichnis, dann $ pip install -t lib google-api-python-client

+0

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

+0

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

+0

Klingt wie ein Hack. – QuestionAndAnswer

Verwandte Themen