Firebase-tools: 部署功能极其缓慢

创建于 2017-11-14  ·  94评论  ·  资料来源: firebase/firebase-tools

版本信息

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...阶段挂起。

image

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

最有用的评论

这个问题真是让人头疼。 我认为应该给予高度优先:/

所有94条评论

感谢归档! 我们知道,部署缓慢是功能​​体验的一大痛点,也是我们正在通过各种策略努力解决的问题。

@laurenzlong
作为 Firebase 的新手,乍一看我以为我搞砸了,因为部署总是停在 _functions:preparing functions directory for uploading..._ 部分。
提供一些额外的信息(例如:需要 3-5 分钟才能完成)会非常好,直到问题得到解决。

作为一个新手,我花了很多时间取消这种认为我做错了什么的想法。

问题有点明显。 init 命令创建了一个巨大的“节点模块”文件夹。 在我的机器上是:22,903 个文件,2,782 个文件夹。 该代码将所有这些复制到一个临时文件夹。

这是我所做的:

  1. 使用日志打印语句,我确定了慢速代码行。 是这里:
    https://github.com/firebase/firebase-tools/blob/master/lib/prepareFunctionsUpload.js#L26

prepareFunctionsUpload.js 中的第 26 行:
fs.copySync(options.config.path(options.config.get('functions.source')), tmpdir.name);

  1. 我打印了该文件复制调用的参数。 在我的机器上是:
    C:\Users\thoma\StudioProjects\LSystemAndroid\firestorefunctions
    -> C:\Users\thoma\AppData\Local\Temp\fbfn_752624vejX0cv3GEJI

函数文件夹是由 CLI 命令 init 创建的。 它看起来像这样:

  • node_modules(巨大的大小)
  • .gitignore
  • index.js
  • 包.json
  • 打包-lock.json

在我看来,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-functionsfirebase-adminlodash等我在每个函数中都使用的软件包会怎样?

@merlinnot这是一个非常合理的用例。 部署配额由 Google Cloud Functions 控制,我建议在他们的公共问题跟踪器上提交请求: https ://cloud.google.com/functions/docs/support

对于所有感兴趣的人: https ://issuetracker.google.com/issues/71385193

@laurenzlong复制源时是否可以忽略node_modules文件夹,然后执行npm install --productionyarn 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...

部署本身仍然需要相当长的时间。

在相同情况下堆叠:
screen shot 2018-01-31 at 18 57 02

"firebase-admin": "^5.8.2",
"firebase-functions": "^0.8.1",

npm install -g npm@latest给了我稍微不同的输入,删除firebase-cli似乎也改变了一些东西。

screen shot 2018-01-31 at 19 11 38

更新:

好的,在运行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仍然很慢,不知道为什么
image

你更新到最新版本了吗? 我上周更新了,现在我的部署需要 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 分钟😞

此页面是否有帮助?
0 / 5 - 0 等级