【问题标题】:setting up a python http function in firestore在firestore中设置python http函数
【发布时间】:2019-07-21 06:47:38
【问题描述】:

我有一个旨在与第三方应用集成的应用。这些应用程序应该能够在数据发生变化时触发函数。

按照我的设想,我将使用节点函数为第三方安全地准备数据,并从 firestore 上的应用程序配置中获取要调用的 url。我会从节点函数调用该 url,并等待它返回,并根据需要更新结果(实际上是触发推送通知)。 -- 这些第三方函数往往是python函数,所以我的demo应该是python的。

我有初始节点功能和 Firestore 设置,因此我目前正在触发 ECONNREFUSED -- 因为我不知道如何设置第三方功能。

假设这是我需要触发的函数:

def hello_world(request):
    request_json = request.get_json()
    if request_json and 'name' in request_json:
        name = request_json['name']
    else:
        name = 'World'
    return 'Hello, {}!\n'.format(name)

我是否需要设置一个单独的 gcloud 帐户来托管此功能,或者我可以将它包含在我的 firestore 功能中吗?如果是这样,我如何将其部署到 Firestore?通常使用我的节点函数,我正在运行firebase deploy,它会自动从我的 index.js 文件中找到我的函数。

【问题讨论】:

  • 我对您使用的技术感到困惑。你说 Firestore(一个数据库),但我没有看到 Firestore 代码,而且描述看起来更像是你在尝试使用 Cloud Functions(在 Google 的服务器上执行你的代码的 sn-ps)。您是在谈论 Cloud Functions(直接来自 FirebaseGCP)吗?
  • 嗨@FrankvanPuffelen,没错,这只是一个响应http调用的函数——本质上是一个GCF。该 http 调用将从已在 firestore 中构建并正确运行的 firebase 函数触发。我的问题是,我是否必须为此功能创建一个新的 GCF 项目,还是可以以与我的 firestore 功能类似的方式发布它?我注意到,如果它们是节点,我似乎可以直接在 Firestore 中发布 http 函数(本质上是 GCF):我会更改它们的触发方式。但这是一个 python 脚本。
  • 没有“在 Firestore 中运行的云功能”这样的东西。如果您的意思是“由 Firestore 触发的云功能”,那么这个问题就更有意义了。我会为此写一个答案。

标签: python firebase google-cloud-firestore google-cloud-functions


【解决方案1】:

如果您询问由 Cloud Firestore 触发的 Cloud Functions 是否可以与由 HTTP(S) 请求触发的 Cloud Functions 共存于一个项目中,那么答案是“可以”。无需为每种函数类型设置单独的(Firebase 或 Cloud)项目。

但是:当您使用 firebase deploy 通过 Firebase CLI 部署 Cloud Functions 时,它会删除它在项目中找到的任何不在代码中的函数。如果你在 Python 和 Node.js 中都有函数,那么永远不会有一个代码库包含这两者,所以一揽子部署总是会删除你的一些函数。所以在这种情况下,你应该使用granular deploy option of the Firebase CLI

【讨论】:

  • 谢谢你,弗兰克。如何部署我提供的演示脚本?
  • 啊,我才意识到。您的 Firestore 触发函数是用 Node.js 编写的吗?虽然您可以在单个项目上拥有多个环境,但您需要精细地部署它们。所以通常这意味着使用 GCP 工具进行部署,结合granular deploy with the Firebase CLI
猜你喜欢
  • 2019-06-24
  • 2021-04-11
  • 1970-01-01
  • 2010-11-27
  • 1970-01-01
  • 1970-01-01
  • 2021-12-20
  • 2020-10-20
  • 2019-07-20
相关资源
最近更新 更多