3.15.0
制作一个只有 1 个函数的简单functions
目录:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
exports.ping = functions.https.onRequest((req, res) => {
res.status(200).send('pong');
}
现在使用firebase deploy --only functions
进行部署。
更快地部署。 现在只需几分钟即可部署一个小型函数文件。 如果我将其与托管上传/部署进行比较,则该文件运行速度非常快,而且远不止一个文件。
上传/部署需要很长时间。 它在preparing functions directory for uploading...
阶段挂起。
firebase deploy --only functions
的调试日志:
_请注意,我在重现步骤中使用了另一个函数,但它是相同的想法:一个只有几行代码的小函数。_
> firebase deploy --only functions --debug
[2017-11-14T10:03:55.799Z] ----------------------------------------------------------------------
[2017-11-14T10:03:55.804Z] Command: C:\Program Files\nodejs\node.exe C:\Program Files\nodejs\node_modules\firebase-tools\bin\firebase deploy --only functions --debug
[2017-11-14T10:03:55.806Z] CLI Version: 3.15.0
[2017-11-14T10:03:55.806Z] Platform: win32
[2017-11-14T10:03:55.806Z] Node Version: v6.11.1
[2017-11-14T10:03:55.807Z] Time: Tue Nov 14 2017 04:03:55 GMT-0600 (Central Standard Time (Mexico))
[2017-11-14T10:03:55.807Z] ----------------------------------------------------------------------
[2017-11-14T10:03:55.826Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
[2017-11-14T10:03:55.827Z] > authorizing via signed-in user
[2017-11-14T10:03:55.831Z] >>> HTTP REQUEST GET https://admin.firebase.com/v1/projects/marktec-itesm
Tue Nov 14 2017 04:03:55 GMT-0600 (Central Standard Time (Mexico))
[2017-11-14T10:03:56.230Z] <<< HTTP RESPONSE 200 server=nginx, date=Tue, 14 Nov 2017 10:03:57 GMT, content-type=application/json; charset=utf-8, content-length=108, connection=close, x-content-type-options=nosniff, strict-transport-security=max-age=31536000; includeSubdomains, cache-control=no-cache, no-store
[2017-11-14T10:03:56.232Z] >>> HTTP REQUEST GET https://admin.firebase.com/v1/database/marktec-itesm/tokens
Tue Nov 14 2017 04:03:56 GMT-0600 (Central Standard Time (Mexico))
[2017-11-14T10:03:56.622Z] <<< HTTP RESPONSE 200 server=nginx, date=Tue, 14 Nov 2017 10:03:57 GMT, content-type=application/json; charset=utf-8, content-length=262, connection=close, x-content-type-options=nosniff, strict-transport-security=max-age=31536000; includeSubdomains, cache-control=no-cache, no-store
=== Deploying to 'marktec-itesm'...
i deploying functions
[2017-11-14T10:03:57.040Z] > [functions] package.json contents: {
"name": "functions",
"description": "Cloud Functions for Firebase",
"scripts": {
"serve": "firebase serve --only functions",
"shell": "firebase experimental:functions:shell",
"start": "npm run shell",
"deploy": "firebase deploy --only functions",
"logs": "firebase functions:log"
},
"dependencies": {
"firebase-admin": "~5.4.2",
"firebase-functions": "^0.7.1"
},
"private": true
}
i functions: ensuring necessary APIs are enabled...
i runtimeconfig: ensuring necessary APIs are enabled...
[2017-11-14T10:03:57.043Z] >>> HTTP REQUEST GET https://servicemanagement.googleapis.com/v1/services/cloudfunctions.googleapis.com/projectSettings/marktec-itesm?view=CONSUMER_VIEW
Tue Nov 14 2017 04:03:57 GMT-0600 (Central Standard Time (Mexico))
[2017-11-14T10:03:57.044Z] >>> HTTP REQUEST GET https://servicemanagement.googleapis.com/v1/services/runtimeconfig.googleapis.com/projectSettings/marktec-itesm?view=CONSUMER_VIEW
Tue Nov 14 2017 04:03:57 GMT-0600 (Central Standard Time (Mexico))
[2017-11-14T10:03:57.479Z] <<< HTTP RESPONSE 200 content-type=application/json; charset=UTF-8, vary=X-Origin, Referer,
Origin,Accept-Encoding, date=Tue, 14 Nov 2017 10:03:58 GMT, server=ESF, cache-control=private, x-xss-protection=1; mode=block, x-frame-options=SAMEORIGIN, x-content-type-options=nosniff, alt-svc=quic=":443"; ma=2592000; v="41,39,38,37,35", accept-ranges=none, connection=close
+ functions: all necessary APIs are enabled
[2017-11-14T10:03:57.488Z] <<< HTTP RESPONSE 200 content-type=application/json; charset=UTF-8, vary=X-Origin, Referer,
Origin,Accept-Encoding, date=Tue, 14 Nov 2017 10:03:58 GMT, server=ESF, cache-control=private, x-xss-protection=1; mode=block, x-frame-options=SAMEORIGIN, x-content-type-options=nosniff, alt-svc=quic=":443"; ma=2592000; v="41,39,38,37,35", accept-ranges=none, connection=close
+ runtimeconfig: all necessary APIs are enabled
[2017-11-14T10:03:57.489Z] >>> HTTP REQUEST GET https://appengine.googleapis.com/v1/apps/marktec-itesm
Tue Nov 14 2017 04:03:57 GMT-0600 (Central Standard Time (Mexico))
[2017-11-14T10:03:57.490Z] >>> HTTP REQUEST GET https://apikeys.googleapis.com/v1/projects/marktec-itesm/apiKeys
Tue Nov 14 2017 04:03:57 GMT-0600 (Central Standard Time (Mexico))
[2017-11-14T10:03:57.775Z] <<< HTTP RESPONSE 200 content-type=application/json; charset=UTF-8, vary=X-Origin, Referer,
Origin,Accept-Encoding, date=Tue, 14 Nov 2017 10:03:58 GMT, server=ESF, cache-control=private, x-xss-protection=1; mode=block, x-frame-options=SAMEORIGIN, x-content-type-options=nosniff, alt-svc=quic=":443"; ma=2592000; v="41,39,38,37,35", accept-ranges=none, connection=close
[2017-11-14T10:03:57.950Z] <<< HTTP RESPONSE 200 content-type=application/json; charset=UTF-8, vary=X-Origin, Referer,
Origin,Accept-Encoding, date=Tue, 14 Nov 2017 10:03:58 GMT, server=ESF, cache-control=private, x-xss-protection=1; mode=block, x-frame-options=SAMEORIGIN, x-content-type-options=nosniff, alt-svc=quic=":443"; ma=2592000; v="41,39,38,37,35", accept-ranges=none, connection=close
i functions: preparing functions directory for uploading...
[2017-11-14T10:05:52.258Z] >>> HTTP REQUEST GET https://runtimeconfig.googleapis.com/v1beta1/projects/marktec-itesm/configs
Tue Nov 14 2017 04:05:52 GMT-0600 (Central Standard Time (Mexico))
[2017-11-14T10:05:52.676Z] <<< HTTP RESPONSE 200 content-type=application/json; charset=UTF-8, vary=X-Origin, Referer,
Origin,Accept-Encoding, date=Tue, 14 Nov 2017 10:05:53 GMT, server=ESF, cache-control=private, x-xss-protection=1; mode=block, x-frame-options=SAMEORIGIN, x-content-type-options=nosniff, alt-svc=quic=":443"; ma=2592000; v="41,39,38,37,35", accept-ranges=none, connection=close
i functions: packaged functions (22.1 KB) for uploading
[2017-11-14T10:06:01.593Z] >>> HTTP REQUEST GET https://www.googleapis.com/storage/v1/b/staging.marktec-itesm.appspot.com
Tue Nov 14 2017 04:06:01 GMT-0600 (Central Standard Time (Mexico))
[2017-11-14T10:06:01.940Z] <<< HTTP RESPONSE 200 x-guploader-uploadid=AEnB2UpSfip_C_K1wvCJaLNVW1q05_zW3D3fph0U7sYHr6_9M5InFI0Pi_X1VFc8B5PpbZImDdZiAaZZLqWXdl-JxdzedIZeExTeX4ifDbfvg7G8tsjPm1Y, etag=CAE=, vary=Origin, X-Origin, content-type=application/json; charset=UTF-8, expires=Tue, 14 Nov 2017 10:06:02 GMT, date=Tue, 14 Nov 2017 10:06:02 GMT, cache-control=private, max-age=0, must-revalidate, no-transform, content-length=548, server=UploadServer, alt-svc=quic=":443"; ma=2592000; v="41,39,38,37,35", connection=close
[2017-11-14T10:06:01.942Z] >>> HTTP REQUEST POST https://www.googleapis.com/upload/storage/v1/b/staging.marktec-itesm.appspot.com/o?uploadType=media&name=firebase-functions-source ReadStream {
_readableState:
ReadableState {
objectMode: false,
highWaterMark: 65536,
buffer: BufferList { head: [Object], tail: [Object], length: 1 },
length: 22627,
pipes: null,
pipesCount: 0,
flowing: null,
ended: true,
endEmitted: false,
reading: false,
sync: false,
needReadable: false,
emittedReadable: true,
readableListening: false,
resumeScheduled: false,
defaultEncoding: 'utf8',
ranOut: false,
awaitDrain: 0,
readingMore: false,
decoder: null,
encoding: null },
readable: true,
domain: null,
_events: { end: [Function] },
_eventsCount: 1,
_maxListeners: undefined,
path: 'C:\\Users\\benja\\AppData\\Local\\Temp\\firebase-functions-69565Vb7CkPZp0rr.zip',
fd: 6,
flags: 'r',
mode: 438,
start: undefined,
end: undefined,
autoClose: true,
pos: undefined,
bytesRead: 22627 }
Tue Nov 14 2017 04:06:01 GMT-0600 (Central Standard Time (Mexico))
[2017-11-14T10:06:02.601Z] <<< HTTP RESPONSE 200 x-guploader-uploadid=AEnB2UqV_ml27ZAt9W3ouCst97NUKPW4MeltDmxl06PA4sGBy6A8fqo0bAbEKHT0vokHMXo0t0yhOY0ve3XT0RrLjsiDwXyhwA, etag=CJPx8MbovdcCEAE=, vary=Origin, X-Origin, content-type=application/json; charset=UTF-8, cache-control=no-cache, no-store, max-age=0, must-revalidate, pragma=no-cache, expires=Mon, 01
Jan 1990 00:00:00 GMT, date=Tue, 14 Nov 2017 10:06:03 GMT, content-length=860, server=UploadServer, alt-svc=quic=":443"; ma=2592000; v="41,39,38,37,35", connection=close
+ functions: functions folder uploaded successfully
[2017-11-14T10:06:02.604Z] >>> HTTP REQUEST GET https://cloudfunctions.googleapis.com/v1beta2/projects/marktec-itesm/locations/us-central1/functions
Tue Nov 14 2017 04:06:02 GMT-0600 (Central Standard Time (Mexico))
[2017-11-14T10:06:02.845Z] <<< HTTP RESPONSE 200 content-type=application/json; charset=UTF-8, vary=X-Origin, Referer,
Origin,Accept-Encoding, date=Tue, 14 Nov 2017 10:06:03 GMT, server=ESF, cache-control=private, x-xss-protection=1; mode=block, x-frame-options=SAMEORIGIN, x-content-type-options=nosniff, alt-svc=quic=":443"; ma=2592000; v="41,39,38,37,35", accept-ranges=none, connection=close
i functions: updating function verifyItesmDomain...
[2017-11-14T10:06:02.849Z] Trigger is: resource=projects/marktec-itesm, eventType=providers/firebase.auth/eventTypes/user.create
[2017-11-14T10:06:02.851Z] >>> HTTP REQUEST PUT https://cloudfunctions.googleapis.com/v1beta2/projects/marktec-itesm/locations/us-central1/functions/verifyItesmDomain { sourceArchiveUrl: 'gs://staging.marktec-itesm.appspot.com/firebase-functions-source',
name: 'projects/marktec-itesm/locations/us-central1/functions/verifyItesmDomain',
entryPoint: 'verifyItesmDomain',
timeout: '60s',
availableMemoryMb: 256,
labels: { 'deployment-tool': 'cli-firebase' },
eventTrigger:
{ resource: 'projects/marktec-itesm',
eventType: 'providers/firebase.auth/eventTypes/user.create' } }
Tue Nov 14 2017 04:06:02 GMT-0600 (Central Standard Time (Mexico))
[2017-11-14T10:06:03.064Z] <<< HTTP RESPONSE 200 content-type=application/json; charset=UTF-8, vary=X-Origin, Referer,
Origin,Accept-Encoding, date=Tue, 14 Nov 2017 10:06:03 GMT, server=ESF, cache-control=private, x-xss-protection=1; mode=block, x-frame-options=SAMEORIGIN, x-content-type-options=nosniff, alt-svc=quic=":443"; ma=2592000; v="41,39,38,37,35", accept-ranges=none, connection=close
[2017-11-14T10:06:03.068Z] >>> HTTP REQUEST GET https://cloudfunctions.googleapis.com/v1beta2/operations/bWFya3RlYy1pdGVzbS91cy1jZW50cmFsMS92ZXJpZnlJdGVzbURvbWFpbi90SFM4NnhjSF9DUQ
Tue Nov 14 2017 04:06:03 GMT-0600 (Central Standard Time (Mexico))
[2017-11-14T10:06:03.257Z] <<< HTTP RESPONSE 200 content-type=application/json; charset=UTF-8, vary=X-Origin, Referer,
Origin,Accept-Encoding, date=Tue, 14 Nov 2017 10:06:04 GMT, server=ESF, cache-control=private, x-xss-protection=1; mode=block, x-frame-options=SAMEORIGIN, x-content-type-options=nosniff, alt-svc=quic=":443"; ma=2592000; v="41,39,38,37,35", accept-ranges=none, connection=close
[2017-11-14T10:06:05.262Z] >>> HTTP REQUEST GET https://cloudfunctions.googleapis.com/v1beta2/operations/bWFya3RlYy1pdGVzbS91cy1jZW50cmFsMS92ZXJpZnlJdGVzbURvbWFpbi90SFM4NnhjSF9DUQ
Tue Nov 14 2017 04:06:05 GMT-0600 (Central Standard Time (Mexico))
[2017-11-14T10:06:05.428Z] <<< HTTP RESPONSE 200 content-type=application/json; charset=UTF-8, vary=X-Origin, Referer,
Origin,Accept-Encoding, date=Tue, 14 Nov 2017 10:06:06 GMT, server=ESF, cache-control=private, x-xss-protection=1; mode=block, x-frame-options=SAMEORIGIN, x-content-type-options=nosniff, alt-svc=quic=":443"; ma=2592000; v="41,39,38,37,35", accept-ranges=none, connection=close
[2017-11-14T10:06:07.431Z] >>> HTTP REQUEST GET https://cloudfunctions.googleapis.com/v1beta2/operations/bWFya3RlYy1pdGVzbS91cy1jZW50cmFsMS92ZXJpZnlJdGVzbURvbWFpbi90SFM4NnhjSF9DUQ
Tue Nov 14 2017 04:06:07 GMT-0600 (Central Standard Time (Mexico))
[2017-11-14T10:06:07.603Z] <<< HTTP RESPONSE 200 content-type=application/json; charset=UTF-8, vary=X-Origin, Referer,
Origin,Accept-Encoding, date=Tue, 14 Nov 2017 10:06:08 GMT, server=ESF, cache-control=private, x-xss-protection=1; mode=block, x-frame-options=SAMEORIGIN, x-content-type-options=nosniff, alt-svc=quic=":443"; ma=2592000; v="41,39,38,37,35", accept-ranges=none, connection=close
[2017-11-14T10:06:09.606Z] >>> HTTP REQUEST GET https://cloudfunctions.googleapis.com/v1beta2/operations/bWFya3RlYy1pdGVzbS91cy1jZW50cmFsMS92ZXJpZnlJdGVzbURvbWFpbi90SFM4NnhjSF9DUQ
Tue Nov 14 2017 04:06:09 GMT-0600 (Central Standard Time (Mexico))
[2017-11-14T10:06:09.755Z] <<< HTTP RESPONSE 200 content-type=application/json; charset=UTF-8, vary=X-Origin, Referer,
Origin,Accept-Encoding, date=Tue, 14 Nov 2017 10:06:10 GMT, server=ESF, cache-control=private, x-xss-protection=1; mode=block, x-frame-options=SAMEORIGIN, x-content-type-options=nosniff, alt-svc=quic=":443"; ma=2592000; v="41,39,38,37,35", accept-ranges=none, connection=close
[2017-11-14T10:06:11.757Z] >>> HTTP REQUEST GET https://cloudfunctions.googleapis.com/v1beta2/operations/bWFya3RlYy1pdGVzbS91cy1jZW50cmFsMS92ZXJpZnlJdGVzbURvbWFpbi90SFM4NnhjSF9DUQ
Tue Nov 14 2017 04:06:11 GMT-0600 (Central Standard Time (Mexico))
[2017-11-14T10:06:11.912Z] <<< HTTP RESPONSE 200 content-type=application/json; charset=UTF-8, vary=X-Origin, Referer,
Origin,Accept-Encoding, date=Tue, 14 Nov 2017 10:06:12 GMT, server=ESF, cache-control=private, x-xss-protection=1; mode=block, x-frame-options=SAMEORIGIN, x-content-type-options=nosniff, alt-svc=quic=":443"; ma=2592000; v="41,39,38,37,35", accept-ranges=none, connection=close
[2017-11-14T10:06:13.913Z] >>> HTTP REQUEST GET https://cloudfunctions.googleapis.com/v1beta2/operations/bWFya3RlYy1pdGVzbS91cy1jZW50cmFsMS92ZXJpZnlJdGVzbURvbWFpbi90SFM4NnhjSF9DUQ
Tue Nov 14 2017 04:06:13 GMT-0600 (Central Standard Time (Mexico))
[2017-11-14T10:06:14.078Z] <<< HTTP RESPONSE 200 content-type=application/json; charset=UTF-8, vary=X-Origin, Referer,
Origin,Accept-Encoding, date=Tue, 14 Nov 2017 10:06:14 GMT, server=ESF, cache-control=private, x-xss-protection=1; mode=block, x-frame-options=SAMEORIGIN, x-content-type-options=nosniff, alt-svc=quic=":443"; ma=2592000; v="41,39,38,37,35", accept-ranges=none, connection=close
[2017-11-14T10:06:16.080Z] >>> HTTP REQUEST GET https://cloudfunctions.googleapis.com/v1beta2/operations/bWFya3RlYy1pdGVzbS91cy1jZW50cmFsMS92ZXJpZnlJdGVzbURvbWFpbi90SFM4NnhjSF9DUQ
Tue Nov 14 2017 04:06:16 GMT-0600 (Central Standard Time (Mexico))
[2017-11-14T10:06:16.249Z] <<< HTTP RESPONSE 200 content-type=application/json; charset=UTF-8, vary=X-Origin, Referer,
Origin,Accept-Encoding, date=Tue, 14 Nov 2017 10:06:17 GMT, server=ESF, cache-control=private, x-xss-protection=1; mode=block, x-frame-options=SAMEORIGIN, x-content-type-options=nosniff, alt-svc=quic=":443"; ma=2592000; v="41,39,38,37,35", accept-ranges=none, connection=close
[2017-11-14T10:06:18.252Z] >>> HTTP REQUEST GET https://cloudfunctions.googleapis.com/v1beta2/operations/bWFya3RlYy1pdGVzbS91cy1jZW50cmFsMS92ZXJpZnlJdGVzbURvbWFpbi90SFM4NnhjSF9DUQ
Tue Nov 14 2017 04:06:18 GMT-0600 (Central Standard Time (Mexico))
[2017-11-14T10:06:18.405Z] <<< HTTP RESPONSE 200 content-type=application/json; charset=UTF-8, vary=X-Origin, Referer,
Origin,Accept-Encoding, date=Tue, 14 Nov 2017 10:06:19 GMT, server=ESF, cache-control=private, x-xss-protection=1; mode=block, x-frame-options=SAMEORIGIN, x-content-type-options=nosniff, alt-svc=quic=":443"; ma=2592000; v="41,39,38,37,35", accept-ranges=none, connection=close
[2017-11-14T10:06:20.406Z] >>> HTTP REQUEST GET https://cloudfunctions.googleapis.com/v1beta2/operations/bWFya3RlYy1pdGVzbS91cy1jZW50cmFsMS92ZXJpZnlJdGVzbURvbWFpbi90SFM4NnhjSF9DUQ
Tue Nov 14 2017 04:06:20 GMT-0600 (Central Standard Time (Mexico))
[2017-11-14T10:06:20.588Z] <<< HTTP RESPONSE 200 content-type=application/json; charset=UTF-8, vary=X-Origin, Referer,
Origin,Accept-Encoding, date=Tue, 14 Nov 2017 10:06:21 GMT, server=ESF, cache-control=private, x-xss-protection=1; mode=block, x-frame-options=SAMEORIGIN, x-content-type-options=nosniff, alt-svc=quic=":443"; ma=2592000; v="41,39,38,37,35", accept-ranges=none, connection=close
[2017-11-14T10:06:22.591Z] >>> HTTP REQUEST GET https://cloudfunctions.googleapis.com/v1beta2/operations/bWFya3RlYy1pdGVzbS91cy1jZW50cmFsMS92ZXJpZnlJdGVzbURvbWFpbi90SFM4NnhjSF9DUQ
Tue Nov 14 2017 04:06:22 GMT-0600 (Central Standard Time (Mexico))
[2017-11-14T10:06:22.753Z] <<< HTTP RESPONSE 200 content-type=application/json; charset=UTF-8, vary=X-Origin, Referer,
Origin,Accept-Encoding, date=Tue, 14 Nov 2017 10:06:23 GMT, server=ESF, cache-control=private, x-xss-protection=1; mode=block, x-frame-options=SAMEORIGIN, x-content-type-options=nosniff, alt-svc=quic=":443"; ma=2592000; v="41,39,38,37,35", accept-ranges=none, connection=close
[2017-11-14T10:06:24.768Z] >>> HTTP REQUEST GET https://cloudfunctions.googleapis.com/v1beta2/operations/bWFya3RlYy1pdGVzbS91cy1jZW50cmFsMS92ZXJpZnlJdGVzbURvbWFpbi90SFM4NnhjSF9DUQ
Tue Nov 14 2017 04:06:24 GMT-0600 (Central Standard Time (Mexico))
[2017-11-14T10:06:24.952Z] <<< HTTP RESPONSE 200 content-type=application/json; charset=UTF-8, vary=X-Origin, Referer,
Origin,Accept-Encoding, date=Tue, 14 Nov 2017 10:06:25 GMT, server=ESF, cache-control=private, x-xss-protection=1; mode=block, x-frame-options=SAMEORIGIN, x-content-type-options=nosniff, alt-svc=quic=":443"; ma=2592000; v="41,39,38,37,35", accept-ranges=none, connection=close
+ functions[verifyItesmDomain]: Successful update operation.
+ Deploy complete!
Project Console: https://console.firebase.google.com/project/marktec-itesm/overview
感谢归档! 我们知道,部署缓慢是功能体验的一大痛点,也是我们正在通过各种策略努力解决的问题。
@laurenzlong
作为 Firebase 的新手,乍一看我以为我搞砸了,因为部署总是停在 _functions:preparing functions directory for uploading..._ 部分。
提供一些额外的信息(例如:需要 3-5 分钟才能完成)会非常好,直到问题得到解决。
作为一个新手,我花了很多时间取消这种认为我做错了什么的想法。
问题有点明显。 init 命令创建了一个巨大的“节点模块”文件夹。 在我的机器上是:22,903 个文件,2,782 个文件夹。 该代码将所有这些复制到一个临时文件夹。
这是我所做的:
prepareFunctionsUpload.js 中的第 26 行:
fs.copySync(options.config.path(options.config.get('functions.source')), tmpdir.name);
函数文件夹是由 CLI 命令 init 创建的。 它看起来像这样:
在我看来,CLI 命令 init 不应该创建该 node_modules 文件夹。 它有 165MB 大。 添加到每个项目中似乎是不合理的。
@thomasfischerm
这实际上不是问题。 node_modules 不会复制到临时文件夹中,您可以从这里的这一行看到: https ://github.com/firebase/firebase-tools/blob/master/lib/prepareFunctionsUpload.js#L76
firebase init
必须将所有节点模块本地安装在函数源文件夹内,否则本地服务函数将不起作用,并且触发器提取将不起作用(这是 CLI 了解哪些事件触发每个功能,以便它可以正确部署它们)。
我在第 26 行之前和之后放置了一个调试打印行。 那条线花了几分钟。
然后,我添加了一个过滤器来打印出正在复制的文件。 它包括所有 node_modules 文件。
然后,我更改了过滤器以排除 node_module 文件。 现在部署进展很快。 然而不久之后,该脚本似乎正在尝试评估云函数的正确性。 该代码失败,因为它缺少库依赖项。
您指向的源代码行似乎是稍后的步骤。 看起来文件(减去 node_modules)在上传到云之前被存档到一个 zip 文件中。 那条线在我的机器上似乎运行不慢。
是的,你是对的,我错了,node_modules 确实被复制了。 我认为不将 node_modules 复制到临时目录是一个有效的想法。 使这有点复杂的是,CLI 在触发解析之前将“.runtimeconfig.json”写入临时文件夹,并且该文件与其余函数源代码一起上传,我们不想编写将此文件放入实际的源代码目录。 所以可能有一个很好的解决方案,既可以提高部署速度,又可以确保没有意外的副作用,但我必须尝试一下。 您也可以随时提出拉取请求。
我有同样的问题。 在“准备目录...”步骤中打印更多消息可能是个好主意,这样用户就不会认为 firebase-tools 挂起。
编辑:这是在 Ubuntu WSL 上。 在 Linux 上,“准备”阶段不会挂起。 “创建函数”步骤可能很慢,但没有我之前经历的那么多。
这个问题真是让人头疼。 我认为应该给予高度优先:/
我正在尝试为我的项目实现 firebase 功能,因为这个错误我不得不推迟它。
这个错误让我浪费了很多时间。
希望尽快修复!
这个问题是一个主要障碍。 主要是因为我使用了 Firestore,而聚合、计数器和存在等东西只能由云功能很好地处理,而且每次只挂起 5 分钟。
@PulpoEnPatineta这不是错误。 这只是部署时间的一个简单问题。
@McStuffins如果您的汽车需要五分钟才能启动,这是一个错误还是仅仅是开始时间的问题?
有解决办法吗? 它真的非常慢。
我从一开始就跟踪这个问题,但这对我来说从来都不是问题,因为我有一张 CD,它为我完成了所有工作。 我也从不部署功能只是为了测试它们是否有效。 所以基本上这对我来说并不重要。
直到今天,当我遇到一个意想不到的限制:我无法再部署我的功能,因为部署到生产超过了每日配额(12,000 秒)。 我有大约 55 个带有各种触发器(pubsub、firestore、https)的函数。 处理太多了吗?
现在我必须部署我的应用程序两天:rofl: :lollipop: :+1: :1st_place_medal: :coffin: :tada: :taco: :cactus: :dancer: :smiling_imp:
有时,当我在部署时,它非常慢,然后在终端中出现“构建环境错误”的警告
@srinurp请查看我上面链接的拉取请求,它将解决部分问题。 后端团队正在努力解决问题的其他部分(但这是一项非常复杂的工作,因此我们感谢您的耐心等待。)
@merlinnot除非您在每次部署时更新所有函数的代码,否则我建议使用 --only 命令部署单个函数或函数组。 请参阅https://firebase.google.com/docs/cli/#partial_deploys。
@McStuffins “构建环境中的错误”通常表示生产问题,在这种情况下,请在https://firebase.google.com/support/提交支持票,您可以通过访问查看是否存在任何持续的生产问题Firebase 状态仪表板
@laurenzlong我必须将我的 CI 配置为自动检测部署之间每个功能的变化(包括解决依赖关系)。 如果我更新像firebase-functions
、 firebase-admin
、 lodash
等我在每个函数中都使用的软件包会怎样?
@merlinnot这是一个非常合理的用例。 部署配额由 Google Cloud Functions 控制,我建议在他们的公共问题跟踪器上提交请求: https ://cloud.google.com/functions/docs/support
对于所有感兴趣的人: https ://issuetracker.google.com/issues/71385193
@laurenzlong复制源时是否可以忽略node_modules
文件夹,然后执行npm install --production
或yarn install --production
? 因为这些工具可能比简单的复制和粘贴更快。
@horacehylee
这可能是一个突破性的变化。 有些人(包括我自己)可能仍然通过相对路径(例如“package-name”:“./externs/package.tgz”)引用包,主要是因为私有存储库的(现已修复)问题。 该工具必须考虑所有这些极端情况。
另一件事是缓存:如果 Google 代表您下载包,他们将不得不实现一些内部缓存机制。 我们的计算机上都有本地缓存(npm 和 yarn 都有缓存机制),因此我们不会杀死 npm 的服务器;)
有些人可能还想简单地测试外部库中的一些更改。 仅更改文件和部署函数比创建分支、进行更改、临时更改对包的引用要容易得多,...
底线:它工作得很好,保持现在的状态:+1:
@horacehylee @merlinnot感谢 2 美分。 请参阅https://github.com/firebase/firebase-tools/pull/578 ,下一个版本的 CLI 将不再复制函数源文件夹期间。
我真的不确定 firebase 会做什么,需要 MINUTES 分钟才能在 6 个 4GHz 核心机器上部署 5 行 1kb 功能,并坐在 1Gbps 光纤连接上。
我知道这听起来像是我在小便,但我真的很好奇在“准备上传目录”期间发生了什么。 真的有人知道吗?
将您的函数目录(包括节点模块)复制到 tmp 目录。
我们的下一个版本会解决这个问题,之前不再需要复制
部署。
在 2018 年 1 月 7 日星期日下午 5:05 hmexx [email protected]写道:
我真的不确定 firebase 可以做什么需要 MINUTES 到
在六核 4GHz 核心机器上部署 5 行 1kb 函数
1Gbps 光纤连接。我知道这听起来像是我在撒尿,但我真的很好奇是什么
在“准备上传目录”期间正在进行。 真的有人知道吗?—
您收到此消息是因为您订阅了此线程。
直接回复此邮件,在 GitHub 上查看
https://github.com/firebase/firebase-tools/issues/536#issuecomment-355868154 ,
或使线程静音
https://github.com/notifications/unsubscribe-auth/AAAD_nUptJWFuYGvEXI0MwmQR-bG9_MKks5tIWm1gaJpZM4QdF3g
.
@mbleigh
啊对。 这解释了它。 看到工作站疯狂一两分钟,只是让下一行打印出“打包功能( 37.55kb !!!)成功上传”哈哈
期待下一个版本。 谢谢回复。
H。
第 19 天。Firebase 仍在部署。 *抓爆米花*
是的。
下一个版本的发布时间是什么时候,我们应该期望部署时间的改进百分比是多少?
只是想知道是否要继续走这条路。
本周应该会发布,你可以期待“准备
部署的功能目录”步骤大大加快(我不
有确切的数字)。 部署的其他部分将保持不变。
2018 年 1 月 15 日星期一下午 12:42 hmexx [email protected]写道:
是的。
下一个版本的发布时间是什么时候,部署的改进百分比是多少
我们应该期待的时间?只是想知道是否要继续走这条路。
—
你收到这个是因为你被提到了。直接回复此邮件,在 GitHub 上查看
https://github.com/firebase/firebase-tools/issues/536#issuecomment-357784792 ,
或使线程静音
https://github.com/notifications/unsubscribe-auth/AAAD_vaj-WngS9dMj7j5Q2AesM0tNMvVks5tK7hBgaJpZM4QdF3g
.
这被释放了!
@mbleigh这是在 3.17.4 版中吗?
@jkossis v3.17.0
从发行说明:
如果要部署函数,则必须通过在函数目录中运行“npm i --save firebase-functions@latest ”将 firebase-functions SDK 更新到最新版本。 这可以实现更快的功能部署。
从分钟到秒:干得好!
对我来说,这仍然需要几分钟。
我有[email protected]
和[email protected]
。 我可以做些什么来帮助进一步调试这个问题?
这是仅部署功能的定时输出。 我已经更改了名称,但它们是 REST 端点、数据库和身份验证触发器的组合。
➜ functions git:(master) ✗ firebase --version
3.17.4
➜ functions git:(master) ✗ time firebase deploy --only functions
=== Deploying to 'XXX'...
i deploying functions
i functions: ensuring necessary APIs are enabled...
✔ functions: all necessary APIs are enabled
i functions: preparing functions directory for uploading...
i functions: packaged functions (123.07 KB) for uploading
✔ functions: functions folder uploaded successfully
i functions: updating function 1...
i functions: updating function 2...
i functions: updating function 3...
i functions: updating function 4...
i functions: updating function 5...
i functions: updating function 6...
✔ functions[1]: Successful update operation.
Function URL (1): https://us-central1-XXX.cloudfunctions.net/1
✔ functions[3]: Successful update operation.
✔ functions[4]: Successful update operation.
✔ functions[5]: Successful update operation.
✔ functions[6]: Successful update operation.
✔ functions[2]: Successful update operation.
Function URL (2): https://us-central1-XXX.cloudfunctions.net/2
✔ Deploy complete!
Project Console: https://console.firebase.google.com/project/XXX/overview
firebase deploy --only functions 4.59s user 1.07s system 1% cpu 6:09.26 total
@adamduren修复是花费过多的时间在preparing functions directory for uploading...
部署本身仍然需要相当长的时间。
在相同情况下堆叠:
"firebase-admin": "^5.8.2",
"firebase-functions": "^0.8.1",
npm install -g npm@latest
给了我稍微不同的输入,删除firebase-cli
似乎也改变了一些东西。
更新:
好的,在运行npm install -g firebase-tools
之后它终于工作了。 感谢https://stackoverflow.com/questions/48531993/firebase-config-variables-are-not-available-error-with-deploying-functions#comment84098334_48531993
嗨,我在同一点遇到问题(“准备函数目录..”)
但就我而言,完成时间超过 25/30 分钟
我有 4 个私有依赖项,它们的重量压缩在 2.20 mb 左右
我发现这是将私有依赖项包含为压缩文件的唯一方法。
难道我做错了什么? 或者这是应该工作的方式?
2018-5-9
firebase deploy
仍然很慢,不知道为什么
你更新到最新版本了吗? 我上周更新了,现在我的部署需要 1-3 分钟(从 25/30 开始)
我看到部署时间为 4 分钟以上,如下所示:
const functions = require('firebase-functions')
exports.test = functions.https.onRequest((req, res) => {
res.send('Hello World')
})
i functions: updating function test...
是挂起的行。
从来没有这么慢过!
@Robula您是否已更新到最新版本的 firebase-tools?
是的,我相信。 firebase —version
报告 3.18.6。
你的版本比我晚。 我不确定他们是否会在 3.18.6 中再次继续传输 node_modules 文件夹,但目前使用 3.18.4,一切似乎都运行良好......
在最近的 firebase-tools 版本中,部署策略并没有出现回归(node_modules 文件夹没有被复制),但是部署时间也会因机器而异,并且会不时发生变化。 功能的初始部署也比后续更新慢。
在本地运行时,我看到preparing functions directory for uploading...
步骤中的部署时间仅在此步骤中就需要近 7 分钟。 构建的预部署步骤在本地大约需要 5 秒。 从调试运行的部署过程中的所有其他步骤都非常快。 我知道部署可能有点慢,但我也使用 AWS lambda 进行工作,非常大的 lambda 部署比这快得多,大约 2 2 3 分钟,包括 python 包安装和构建。
即使从谷歌云构建部署也需要 2 到 3 分钟,而在 aws lambda 中需要 10 到 20 秒。 我只是想问一下cli在上传之前是否压缩了整个函数文件夹?
@laurenzlong ,您能否详细说明这些功能是否已经并行部署,或者这种优化是否正在进行中?
功能一直是并行部署的。 但是请注意,并行部署 10 个函数仍然比部署单个函数慢。
+1 部署功能非常慢。 我按照 cron 作业教程创建了每小时滴答功能,这是我的第一个音调,每次部署都需要一分钟。
@laurenzlong非常感谢您的回复,并感谢您在 Firebase 上的辛勤工作!
是否有任何积极的计划来缩短部署时间? 我问是因为虽然我们确实喜欢 Firebase,但由于部署时间缓慢,我们实际上正在考虑放弃它。 我们有大约 47 个云功能,我们的部署通常需要 3-6 分钟。 与git push heroku master
相比,将相同数量的代码部署到 Heroku 大约需要 20-30 秒。 然后该代码将立即在 Heroku 上运行。 使用 Firebase,我们必须在部署后再等待 20-30 秒(随机)时间,然后才能真正运行已部署的功能(在此期间,新旧功能混合运行)。
所以比较一下部署体验:
*** Heroku:
git push heroku master
20-30s later ...
All newly-deployed functions are now running in a consistent/atomic way
*** Firebase:
firebase deploy --only functions
180-360s later ...
Functions are deployed but only some of the new ones are running, some old ones are still running
20-30s later ...
All new functions running
使用 Firebase 进行原子部署也很困难,因为在部署之后,有一段时间,一些新功能(称为v_n+1
)与一些旧功能v_n
一起运行。 因此,如果您进行重大更新,您可能会使用不同的数据格式或算法来混合运行新旧功能。 这比 Heroku 部署的安全性要低得多,在 Heroku 部署中要么部署所有新功能,要么只运行新功能,要么不部署任何新功能。
此外,有时我们的 47 个函数中的一些函数将无法部署并出现错误,例如
⚠ functions[retrieveFavorites(us-central1)]: Deployment error.
Server Error. getaddrinfo ENOTFOUND cloudfunctions.googleapis.com cloudfunctions.googleapis.com:443
我们正在高度可靠的对称千兆互联网上部署,所以问题不在于我们的网络。
因此,将 Heroku 部署视为一个原子数据库事务(全有或全无),而 Firebase 部署更像是最终与部分故障一致......这使得开发操作变得更加困难,特别是如果您正在推动错误修复半夜响应一页。
坦率地说,在 Firebase 上的部署体验客观上比在 Heroku 或 AWS 上更慢且更不可靠……不要误会我的意思,我们喜欢 Firebase,我们非常感谢您的所有辛勤工作。 我并不是说这听起来像是一次攻击,这不是针对个人的,但我们需要 Firebase 在这里做得更好,或者我们正在考虑去其他地方,因为部署太痛苦了。
再次感谢您在 Firebase 上的辛勤工作。 我们感谢您的帮助:-)。
感谢您分享您的数据点! 我们确实有一些计划来改进这一点,特别是同时部署许多功能(主要是在创建/更新功能的 API 调用之后改进服务器端构建步骤)。 但是,这些基础架构更改将需要几个季度,因此我们非常感谢您在此期间的耐心等待。
您可能已经考虑过这一点,但是您可以在 CI/CD 管道中创建一个脚本来检测哪些函数已被编辑,并且只部署那些带有--only
标志的函数。 这将大大提高您的部署速度。 有关示例,请参见此视频: https ://www.youtube.com/watch?v=iyGHW4UQ_Ts
@laurenzlong谢谢你的信息,劳伦。 但是,我只有一个小的云功能,即使进行了最小的更改,部署仍然需要大约 1 分钟。 即使我只有一个云功能,我也使用该标志。 这里似乎出了点问题。
截至 2019 年 4 月,仍然需要几分钟 - Firebase 版本 6.6.0 - 我所做的只是按照此处的教程进行操作: https ://firebase.google.com/docs/functions/get-started
每次我“firebase deploy”时都只需下载并花费几分钟
过去几天部署甚至托管都需要几分钟,而几周前需要 10-15 秒。 部署功能也会超时。
Firebase 状态页面为绿色https://status.firebase.google.com/ 。
有谁知道为什么会这样?
使用firebase-tools
7.0.0
$ firebase deploy --only=hosting --token xxx
=== Deploying to 'xxx'...
i deploying hosting
i hosting[xxx]: beginning deploy...
i hosting[xxx]: found 1959 files in public
✔ hosting[xxx]: file upload complete
i hosting[xxx]: finalizing version...
✔ hosting[xxx]: version finalized
i hosting[xxx]: releasing new version...
✔ hosting[xxx]: release complete
✔ hosting: Finished running postdeploy script.
✔ Deploy complete!
Project Console: https://console.firebase.google.com/project/xxx/overview
Hosting URL: https://xxx.firebaseapp.com
✨ Done in 181.75s
@laurenzlong-
但是,这些基础架构更改将需要几个季度,因此我们非常感谢您在此期间的耐心等待。
自您几个季度前的最后一次说明以来,是否有任何基础架构方面的更新? 在进行这些更改之前,是否可以重新打开此问题? 除非跟踪已转移到不同/相关的问题,否则已关闭似乎不是适当的状态。
Firebase functions
在构建/上传所有内容并且在服务器端创建/更新功能后仍然非常慢。 正如其他人所说,这是一个主要的发展速度阻尼器。
firebase --version
7.1.0
非常感谢您的考虑!
@repentsinner改善构建/部署时间的后端项目仍在进行中(并且进展顺利!),但仍未发布。
您是否尝试过使用模拟器(通过firebase emulators:start
)来加快您的开发过程? 如果是这样,我们很乐意得到您的反馈!
感谢@samtstern 的更新。
我还没有尝试过模拟器 - 我正在使用来自 Flutter 应用程序的functions.https.onCall
以及 Firestore 中的数据,而且看起来(目前无论如何)重定向应用程序测试版本中的所有内容对我的开发工作站来说,比等待部署更费力。
我想我可以利用等待的时间来研究这个🤨。
祝这个仍然关闭且仍未修复的问题新年快乐! 🎉
也许管理员或 OP 可以将此问题重命名为“准备功能目录以进行极其缓慢的部署”,因为它似乎已仅基于对整个部署过程的该阶段的修复而关闭。
然后我们可以打开一个新的“部署功能非常慢”的问题,因为......部署功能仍然非常慢😄
此问题已关闭,因为我们无法在 CLI 端做更多的事情来缩短部署时间。 对于本地开发,我们将继续投资于模拟器,我们希望人们只有在部署到 prod 时才需要运行firebase deploy
,而不是作为开发生命周期的一部分。
后端更改仍在进行中。 如您所知,出现了意想不到的延误。
感谢@samtstern的澄清,所以我想针对 firebase/firebase-tools 的问题/请求仅适用于 CLI? 将寻找涵盖后端的回购/项目。
关于本地开发——从公共方面来看,Google 似乎真的在鼓励 Firebase 和 Flutter 的集成,这在锡上似乎可以很好地协同工作,但在实践中我们遇到了诸如此类的开发时不一致。 发现这个问题时,我按照建议快速查看了模拟器,但它似乎根本不支持集成的 Firebase 和 Flutter 开发工作流程,当然不如通过云后端那么顺利。 我没有回头看看最近这是否有所改善,但似乎不太可能。
@repentsinner是的,这个 repo 只跟踪 CLI 工作。 当然,我们会尝试回答任何出现的问题,但是当我们在这里无能为力时,我们常常不得不关闭问题。 我们的后端不是开源的,这就是为什么我们通常将人们指向 Firebase支持来提交关于一般 Firebase 事物的错误报告或功能请求。
至于 Flutter,我们喜欢它(参见:https://github.com/FirebaseExtended/flutterfire),但重要的是要注意它不是官方Firebase 平台,这意味着我们无法像我们在原生 Android/iOS/Web。 也许有一天会改变,但现在情况就是这样。
如果您对如何将 Flutter 应用程序连接到 Firebase 模拟器有疑问,请在 FlutterFire 存储库上打开一个问题并抄送我,然后我也可以让合适的 Flutter 人员参与其中。
明白了,感谢@samtstern 的澄清! 目前我已经转移到其他项目,但是当我回到这些东西时会查看 FlutterFire 存储库。
模拟器不支持身份验证上下文,因此它 100% 完全无用 IMO。
我最终发现我的部署冻结了,因为我试图使用 dotenv
只是戳我的头来提醒人们这仍然是一个痛点✌️
对于仍然遇到这个问题的人 - 我发现有用的一件事是利用functions.ignore
来避免上传不必要的膨胀。 我认为一个特别好的包括.git
:
{
"functions": {
"ignore": ["node_modules", ".git", ".gitignore", ".nyc_output", ".runtimeconfig.json", "firebase-debug.log", "tslint.json", "tests"]
}
我完全放弃了功能,因为开发工作流程非常痛苦。
对于仍然遇到这个问题的人 - 我发现有用的一件事是利用
functions.ignore
来避免上传不必要的膨胀。 我认为一个特别好的包括.git
:"functions": { "ignore": ["node_modules", ".git", ".gitignore", ".nyc_output", ".runtimeconfig.json", "firebase-debug.log", "tslint.json", "tests"] }
这实际上产生了一些结果。 现在大约有 65-70% 的时间在运行。 谢谢!
有趣——默认情况下, functions
子目录位于项目根目录下,因此没有.git
文件夹。 这对谁有帮助——你的目录结构是什么样的?
@mbleigh是的。 我最好的猜测是它对此很聪明,并将这些应用于函数目录。
@mbleigh我有一个仅限函数的存储库,所以拥有一个函数目录似乎有点傻。 一切都转移到了根部。
这是我的firebase.json
的摘录:
"functions": {
"ignore": [
"__mocks__",
".cache",
".commitlintrc.yaml",
".dependabot",
".editorconfig",
".eslintrc.yaml",
".firebase",
".firebaserc",
".git",
".gitattributes",
".github",
".gitignore",
".lintstagedrc.js",
".nvmrc",
".prettierignore",
".prettierrc.yaml",
".vscode",
"CHANGELOG.md",
"cloudbuild.yaml",
"codecov.yml",
"CONTRIBUTING.md",
"coverage",
"cSpell.json",
"decisions",
"firebase.json",
"firestore.indexes.json",
"jest.config.js",
"node_modules",
"README.md",
"rfcs",
"scripts",
"src",
"test",
"tsconfig.json",
"tsconfig.production.json"
],
"source": "."
},
我很乐意将其替换为:
```
{
“包括”:[“lib”,“package.json”,“package-lock.json”]
}
FWIW我相信这些接受球体,所以你可以这样做:
{
"exclude": ["!{lib,package.json,package-lock.json}"]
}
刚开始使用云功能,部署时间很痛苦。
痛苦的部署时间:(
我们的 firebase 应用程序现在运行着 60 个云函数。 起初,由于配额,我们开始遇到很多部署失败,因此我们按照文档的建议将其分成批次。 它现在始终如一地部署,但作为 GitHub 操作 CI 的一部分在默认运行器上部署每批需要约 3 分钟。 每个批次大约 6 个,因此总共 10 个批次,使我们的功能部署时间约为 30 分钟。
函数本身是非常小的代码,具有最小的依赖关系。 不知道我们还能做些什么来加速管道。
听到这真的很难过。 另一种方法是将多个入口点/路由捆绑到一个函数中。 从关注点/大小/安全性的分离来看,这显然不是最好的,但这就是我们对所有 API 端点(然后使用内部路由器的单个入口点)所做的,并且从那以后没有经历过很多配额限制(但是它们确实偶尔发生)。
尽管如此,这个配额限制似乎真的很低,因为官方文档列出了“通过 Cloud Functions API 调用部署或删除函数”的“每 100 秒 80 个”。 我假设谷歌支持不能进一步提高这个限制?
尽管如此,这个配额限制似乎真的很低,因为官方文档列出了“通过 Cloud Functions API 调用部署或删除函数”的“每 100 秒 80 个”。 我假设谷歌支持不能进一步提高这个限制?
@dinvlad我正在向销售和支持部门询问有关提高 API 限制的信息,它在 GCP 控制台配额部分中被明确禁用/变灰。 最终能够让一位 Google 工程师参与环聊,他告诉我“配额不会改变”......所以我想不会。
我们在下一版本的标准忽略列表中添加了.git
:
https://github.com/firebase/firebase-tools/pull/2395
这应该会加快某些人的发布速度。 当然,对于 Cloud Functions 后端的延迟,我们(Firebase CLI 团队)无能为力。
确保在不更新函数时执行firebase deploy --only hosting
在这里,我们也一直在将相关功能分组到一个函数中,因此它最终看起来像“每个功能区域一个功能”,而不是“每个单独的功能颗粒一个功能”。
部署的性能特征强烈推动了一个功能的架构!
此问题何时以及为何关闭。 它于 2017 年 11 月开业,看起来它仍然是一个与当时一样多的问题。 我在这里看不到对“关闭”的引用,我很想知道它为什么被关闭。
我没有抱怨,只是想知道。 我确信它正在处理中,但很高兴知道任何进展。
@chriscurnow它已关闭,因为真正的原因显然是由于(封闭源代码)服务器端而不是 CLI 工具,即使它向最终用户显示为 CLI 问题(根据 https://github.com 中的@samtstern /firebase/firebase-tools/issues/536#issuecomment-572830647)。
不幸的是,后端没有好的公共跟踪器,所以我们在这里得到更新:(
我们如何打开这个错误让谷歌在他们的后端修复它?
慢得离谱
就像,如果要花这么长时间,使用 firebase 函数还有什么意义?
嘿伙计们,也许我们都可以向谷歌报告这个问题,也许他们会听?
https://firebase.google.com/support/troubleshooter/contact
每次我尝试将谷歌的东西用于重要的事情时,我都会被提醒他们是现有的对消费者最不友好的公司之一,但是嘿,我们可以试试。
@RenFontes我刚刚提交了案例 00075974:部署 firebase 功能非常慢,以至于无法在 Firebase 支持下使用。 我会用他们回来的任何东西更新这条消息。
可以部署特定功能。 CLI 不能为每个函数都有一个“校验和跟踪器”并且只部署更改的函数(并且还跟踪它使用的所有内容:变量、包......)?
@SrBrahma当然,但是即使您只部署一个功能,问题仍然存在(例如,单个功能部署仍然可能由于超时而失败)。
它不应该由用户来管理批处理功能部署,并且在许多情况下需要原子地更新功能,因此不能拆分/批处理。
感谢有关解决方法的建议,但我们真正需要的是来自 Google 的 SLA 及其对它的遵守。
Firebase 有时会起作用是真的吗?(可能经常)性能很差……真的很慢……你应该支持 Rust 而不是……去吗? 它比Node快得多吗?
还在等待 Google 改进 Google Functions 部署时间吗?
从 PWA 到 SSR 迫使我每次部署都要多等 7 分钟😞
最有用的评论
这个问题真是让人头疼。 我认为应该给予高度优先:/