我有几个google-cloud-functions
,它们之间有共同的代码。
因此,我选择制作一个包装并将其放置在每个文件夹中以实现功能。
以以下目录结构结尾
google-cloud-function
├── main.py
├── requirements.txt
└── helpers
├── tools.py
└── __init__.py
我遵循了文档中的Packaging Local Dependencies来制作我的软件包helpers
。
使用我的requirements.txt
如下:
firebase-admin==4.0.0
google-cloud-storage==1.26.0
google-cloud-firestore==1.6.2
该函数正确部署,但在触发崩溃时没有日志。
这是导入语句。
from helpers.tools import Event, CleanUpUser
如何正确部署此python
google-cloud-function
?
编辑:
main.py
import firebase_admin
from google.cloud import firestore
from helpers.tools import Event
firebase_admin.initialize_app(options={'databaseURL': 'https://database_name.firebaseio.com/'})
firestore_db = firestore.Client()
EVENTS_NAME = 'database-events'
def user_cleanup(data, context):
if Event(EVENTS_NAME).check_event(context):
return 'Done'
user_id = data['uid']
user_ref = firestore_db.document(f'user_data/{user_id}')
return 'Done'
tools.py
import logging
import sys
import traceback
from datetime import datetime
import firebase_admin
import pytz
from google.cloud import firestore
class Event:
def __init__(self, database_name: str):
init_logger()
firebase_admin.initialize_app(options={'databaseURL': 'https://{database_name}.firebaseio.com/'})
def check_event(self, context):
event_id = context.event_id.replace('/', '--')
timestamp = context.timestamp
timestamp = timestamp[0:23] if len(timestamp) >= 24 else timestamp[0:19]
try:
millis = datetime.strptime(timestamp, '%Y-%m-%dT%H:%M:%S.%f').replace(tzinfo=pytz.utc).timestamp()*1000
except ValueError:
millis = datetime.strptime(timestamp, '%Y-%m-%dT%H:%M:%S').replace(tzinfo=pytz.utc).timestamp()*1000
event_ref = firebase_admin.db.reference().child(event_id)
event = event_ref.get()
if not event:
event_ref.set({
'timestamp': millis
})
return False
else:
logging.warning('Event already in the list, exiting this instance.')
return True
编辑:我的问题是我没有通过添加databaseURL
来格式化f
,但仍然能够使用try/catch
调试日志从未显示出原因仅错误...finished with status: 'crash'
,在GitHub