2017-06-05 66 views
0

我需要在我的基礎結構中發佈Pub/Sub事件。因此,我編寫了訂閱主題掃描死鎖的背景Google Cloud Function。它將讀取數據庫並釋放文件上所有崩潰的未關閉的鎖。例如,該功能應該每20個分鐘週期執行一次。正如我所研究的,App Engine的Cron服務無法直接觸發Pub/Sub事件。我寫了一個應該這樣做的python腳本(使用App Engine的例子),但最後的問題是運行時找不到的庫。所以,我有這個錯誤。Google Cloud App Engine Cron無法執行python腳本

enter image description here

和這個文件。

的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() 

實施例從這裏https://github.com/GoogleCloudPlatform/reliable-task-scheduling-compute-engine-sample服用。 也許可以解決這個問題的一般問題,圖書館如何在這裏管理(我已經閱讀過文檔,但它並不真正有幫助)?另外我還發現了另一個使用from google.cloud import pubsub庫聲明的例子,但由於缺少庫也無效。

回答

1

聽起來像你在你的lib目錄中沒有googleapiclient。

幾件事情:

1)儘量from googleapiclient import discovery < - 新版本

2)$ cd到項目目錄,然後$ pip install -t lib google-api-python-client

+0

但是,將所有的庫工作,如果我只是將它們安裝到lib文件夾? App引擎不支持大量的庫,並且有關它們的信息有點碎片化。 – QuestionAndAnswer

+0

App Engine是一個沙箱。您不能將任何庫放入項目中。但是,你可以把大多數安全的。如果一個庫不包含在GAE中,而不是作爲其第三方庫中的一個提供的,你可以將其包含在app.yaml中,那麼你需要將它添加到上面的項目中。 – GAEfan

+0

聽起來像一個黑客。 – QuestionAndAnswer