云功能存储和部署目标

时间:2018-09-06 09:57:35

标签: firebase google-cloud-functions

我正在Firebase上使用部署目标,除我的Cloud功能外,其他一切工作正常。

  1. process.env.FIREBASE_CONFIG的env变量没有正确的值。属性“ databaseURL”和“ storageBucket”不是我已配置目标使用的属性
  2. 当我使用admin.database()时,它并没有使用我已经创建且想要使用的正确RTDB
  3. functions.storage.object().onFinalize()没有“监视”正确的存储桶

我的.firebaserc文件

{
    "projects": {
        "default": "hatch-rpg",
        "dev": "hatch-rpg"
    },
    "targets": {
        "hatch-rpg": {
            "hosting": {
                "shadra": [
                    "shadra"
                ]
            },
            "database": {
                "shadra": [
                    "hatch-shadra-dev"
                ]
            },
            "storage": {
                "shadra": [
                    "hatch-shadra-dev"
                ]
            }
        }
    }
}

我的firebase.json文件

{
    "firestore": {
        "rules": "firestore.rules",
        "indexes": "firestore.indexes.json"
    },
    "database": [
        { "target": "shadra", "rules": "database.rules.json" }
    ],
    "functions": {
        "predeploy": [
            "npm --prefix \"$RESOURCE_DIR\" run lint",
            "npm --prefix \"$RESOURCE_DIR\" run build"
        ],
        "source": "functions"
    },
    "hosting": [
        {
            "target": "shadra",
            "public": "dist/shadra",
            "ignore": [
                "firebase.json",
                "**/.*",
                "**/node_modules/**"
            ],
            "rewrites": [
                {
                    "source": "**",
                    "destination": "/index.html"
                }
            ]
        }
    ],
    "storage": [
        { "target": "shadra", "rules": "storage.rules" }
    ]
}

我正在像这样初始化Firebase

admin.initializeApp(functions.config().firebase);

我想念什么?

非常感谢

编辑: 我尝试通过执行firebase functions:config:set firebase.databaseURL="hatch-shadra-dev.firebaseio.com" firebase.storageBucket="hatch-shadra-dev"来覆盖FIREBASE_CONFIG,但是它没有用,因为Invalid config name firebase.databaseURL, cannot use upper case.然后尝试不使用大写并得到了Cannot set to reserved namespace firebase 如何覆盖此FIREBASE_CONFIG?还是我不应该使用它手动初始化firebase?

1 个答案:

答案 0 :(得分:1)

好,这是我为解决此问题所做的事情。

也许有更好的选择,或者我只是在这里滥用Firebase。 无论如何,这是解决方案:

首先,向项目添加一些配置

firebase functions:config:set target.database="hatch-shadra-dev.firebaseio.com" target.bucket="hatch-shadra-dev"

然后通过admin.initializeApp()在Cloud函数中使用它

import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';

const config = functions.config();
admin.initializeApp({
  ...config.firebase,
  storageBucket: config.target.bucket,
  databaseURL: `https://${config.target.database}`
});