小编And*_*iak的帖子

Firebase Firestore 上下文中的哨兵是什么?

firebase.firestore.FieldValue.serverTimestamp()

返回与 set() 或 update() 一起使用的哨兵,以在写入的数据中包含服务器生成的时间戳。

https://firebase.google.com/docs/reference/js/v8/firebase.firestore.FieldValue#static-servertimestamp

在这种情况下,“哨兵”一词究竟意味着什么?

这是否意味着该值是占位符并且时间戳将应用于服务器端?

firebase google-cloud-firestore

7
推荐指数
1
解决办法
944
查看次数

如果一个字段在 Go 中被“过滤”,这意味着什么?

在 Go 文档中,一个类型通常只显示导出的字段。例如,time.Timer 文档 ( https://golang.org/pkg/time/#Timer ) 显示以下内容:

类型定时器

Timer 类型表示单个事件。当 Timer 到期时,当前时间将在 C 上发送,除非 Timer 是由 AfterFunc 创建的。必须使用 NewTimer 或 AfterFunc 创建计时器。

type Timer struct {
     C <-chan Time
     // contains filtered or unexported fields
}
Run Code Online (Sandbox Code Playgroud)

Go 首字母化以区分导出和未导出的字段,所以这很清楚。但是,包含“过滤”字段是什么意思(例如在上述评论的上下文中)?

go godoc

6
推荐指数
1
解决办法
281
查看次数

如何在 Firebase Cloud Function 可调用堆栈跟踪中显示 TypeScript 源?

我有一组云函数,它们执行类似 CRUD 的函数来获取单个资源、列出资源等等getWidgetByURL,,,, listWidgetsdeleteWidget

对于更广泛的上下文,它们被编写在单个src/service.ts文件中并src/index.ts公开一组可调用对象:

import * as functions from 'firebase-functions'
import * as service from './service'

const region = 'europe-west1'

exports.addJob = functions.region(region).https.onCall(async (data, context) => {
  try {
    functions.logger.debug('addJob called with data', data)
    const job = await service.addJob(data.title, data.company,
      data.location, data.applyUrl, data.salary, data.tags)
    return job
  } catch (err) {
    functions.logger.error(err)
    throw new functions.https.HttpsError('internal', 'internal server error', err)
  }
})
Run Code Online (Sandbox Code Playgroud)

在开发周期中,我npm run build在本地运行以将 JavaScript 编译到目标lib目录中。请注意*.map文件已生成。 …

firebase typescript google-cloud-logging google-cloud-functions

6
推荐指数
2
解决办法
921
查看次数

最佳实践:将资产嵌入文件树?

我的项目当前的结构使得 HTML 模板位于项目根目录中templates/

\n

我的 HTTP 请求处理程序位于文件系统树的下几层。

\n
go.mod\ntemplates/webpp/*.html\ntemplates/admin-dashboard/*html\ncmd/webapp/main.go\ncmd/admin-dashboard/main.go\napp/webapp/handlers/handler.go\n
Run Code Online (Sandbox Code Playgroud)\n

理想情况下,我希望能够按以下方式使用 go:embed:

\n
go.mod\ntemplates/webpp/*.html\ntemplates/admin-dashboard/*html\ncmd/webapp/main.go\ncmd/admin-dashboard/main.go\napp/webapp/handlers/handler.go\n
Run Code Online (Sandbox Code Playgroud)\n

或者

\n
//go:embed ../../templates\n
Run Code Online (Sandbox Code Playgroud)\n

但不幸的是,这两种方法都不存在。这go doc embed

\n
\n

这些模式是相对于包含源文件的包\n目录进行解释的。路径分隔符是正斜杠,\n即使在 Windows 系统上也是如此。模式不能包含 \xe2\x80\x98.\xe2\x80\x99 或 \xe2\x80\x98..\xe2\x80\x99 或空路径\n元素,也不能以斜杠开头或结尾。

\n
\n

我可以重新定位模板(这是我不想做的事情,因为在某些模式下我的 web 应用程序希望看到它们相对于正在运行的二进制文件)。例如

\n
webapp            <-- binary uses templates at runtime\ntemplates/*.html  <-- editable HTML files\n
Run Code Online (Sandbox Code Playgroud)\n

所以我可以让我的构建脚本在编译之前将它们复制到位,但这似乎不必要地复杂;如果我绕过构建脚本或者忘记或搞乱构建顺序,我最终可能会得到嵌入了 v1“旧模板”的 v2 二进制文件。

\n

或者,我可以将templates/目录打包并导出embed.FS,然后将其作为依赖项注入到我的应用程序中,但现在我的代码被重新构造以适应嵌入过程。

\n

go:embed 未来是否有可能允许相对于项目根进行某种类型的嵌入,或者这会引发安全问题?

\n

go:embed 是一个很棒的功能,但感觉我对它很感激——要么被迫复制、重新定位、将我的模板集拆分到单独的目录中,要么调整我的应用程序以使用依赖项注入。

\n

最佳做法是什么?

\n

go

6
推荐指数
1
解决办法
4126
查看次数

如何使用带有Postfix的AWS SES接收退回邮件

我已经配置了postfix来通过遵循他们的集成指南将邮件中继到Amazon SES,并且发送电子邮件工作没有问题.

但是,我最近使用一个生成格式错误的电子邮件的框架编写了一个PHP应用程序.

SES以"554交易失败:预期的MIME类型,得到="拒绝电子邮件,这是可以接受的.

但是,我的本地后缀服务器然后尝试使用from = <>发送发送方未送达通知,该通知将被推送到中继地址.

SES拒绝声明"提供的501无效MAIL FROM地址(回复MAIL FROM命令)")和postfix从队列中删除退回消息.

问题是,确保我收到发送给我的原始554退回邮件的更简单方法是什么?我没有看到让SES继电器从字段接受空的方法,所以我相信解决方案将在于配置postfix以直接向我发送退回消息.

请注意,我使用"退回邮件"一词可能不正确.邮件可能被拒绝,但我不确定这种情况的正确命名.关键点是SES继电器不接受该消息,因此它实际上并没有"出门".

Jun 12 03:11:21 myserver postfix/smtp[6353]: 411BA21795: to=<valid@validdomain.com>, relay=email-smtp.us-east-1.amazonaws.com[54.243.192.132]:25, delay=0.29, delays=0.05/0.02/0.15/0.07, dsn=5.0.0, status=bounced (host email-smtp.us-east-1.amazonaws.com[54.243    .192.132] said: 554 Transaction failed: Expected MIME type, got = (in reply to end of DATA command))
Jun 12 03:11:21 myserver postfix/cleanup[6351]: 93F202179B: message-id=
Jun 12 03:11:21 myserver postfix/qmgr[895]: 93F202179B: from=<>, size=4673, nrcpt=1 (queue active)
Jun 12 03:11:21 myserver postfix/bounce[6354]: 411BA21795: sender non-delivery notification: 93F202179B
Jun 12 03:11:21 myserver postfix/qmgr[895]: 411BA21795: removed …

postfix-mta smtp amazon-web-services email-bounces amazon-ses

5
推荐指数
1
解决办法
2335
查看次数

如何计算 Firestore 查询/where 操作的读/写?

Firebase Firestore 文档说:

从集合中获取多个文档

您还可以通过查询集合中的文档,通过一个请求检索多个文档。例如,您可以使用 where() 查询满足某个条件的所有文档,然后使用 get() 检索结果:

var citiesRef = db.collection('cities');
var query = citiesRef.where('capital', '==', true).get()
    .then(snapshot => {
      snapshot.forEach(doc => {
        console.log(doc.id, '=>', doc.data());
      });
    })
    .catch(err => {
      console.log('Error getting documents', err);
    });
Run Code Online (Sandbox Code Playgroud)

如果我有一个包含 N 个文档的集合,对于上述查询,我​​会产生 N 次读取费用还是一次读取费用?

有什么方法可以使用 SDK 在每次调用的基础上检索读/写计数?

作为我提出问题的理由的一些背景,我有一个包含大量文档(大约 20,000 个)的集合。我想以最具成本效益的方式(最少读取)导出整个集合的文档。

firebase google-cloud-firestore

5
推荐指数
1
解决办法
3367
查看次数

如何优雅地关闭 Kubernetes 上运行的 Go 服务

我有一个用 Go 编写的 API,已进行 Docker 化并在 GKE 上的 Kubernetes 集群中运行。

目前,我的 API 服务器不处理任何关闭场景,例如 Pod 死亡或被故意关闭。

我应该捕获哪组 UNIX 信号来正常关闭服务器以及什么情况会触发它们?例如崩溃、K8s 关闭等。

linux signals go docker kubernetes

5
推荐指数
1
解决办法
3718
查看次数

如何使用stdout Go 1.11记录与跟踪ID相关的Stackdriver日志消息

我在Go 1.11运行时中使用Google App Engine标准环境。Go 1.11的文档说:“使用stdout编写输出的应用程序日志,使用stderr编写错误的应用程序日志”。从Go 1.9指南进行的迁移还建议不要直接调用Google Cloud Logging库,而应通过stdout进行日志记录。 https://cloud.google.com/appengine/docs/standard/go111/writing-application-logs

考虑到这一点,我编写了一个小的HTTP服务(下面的代码),以尝试使用JSON输出到stdout的日志记录到Stackdriver。

当我打印纯文本消息时,它们将按预期显示在日志查看器面板中的textPayload。当我传递JSON字符串时,它们会显示在下方jsonPayload。到目前为止,一切都很好。

因此,我severity在输出字符串中添加了一个字段,然后Stackdriver Log Viewer根据已分级的日志记录NOTICE,WARNING等成功地对消息进行了分类 。https://cloud.google.com/logging/docs/reference/v2/rest/v2/登录项

文档说要设置trace标识符,以将日志条目与原始请求日志相关联。跟踪ID是从X-Cloud-Trace-Context容器设置的标头中提取的。

使用本地模拟 curl -v -H 'X-Cloud-Trace-Context: 1ad1e4f50427b51eadc9b36064d40cc2/8196282844182683029;o=1' http://localhost:8080/

但是,这不会导致消息按请求进行线程传递,而是将该trace属性显示在jsonPayload日志的对象中。(见下文)。

请注意,这severity已按预期解释,并且未出现在中jsonPayload。我曾预期会发生同样的事情trace,但似乎未处理。

如何在原始请求日志消息中实现嵌套消息?(这必须在Go 1.11上使用stdout完成,因为我不希望直接使用Google Cloud日志记录程序包进行记录)。

GAE从正在运行的进程中解析stdout流的确切方式是什么?(在GCE上的VM设置指南中,有一些关于安装代理程序以充当Stackdriver Logging的渠道的信息-GAE是否已安装?)

app.yaml文件如下所示:

runtime: go111

handlers:
- url: /.*
  script: auto



package main

import (
    "fmt"
    "log"
    "net/http"
    "os"
    "strings"
)

var projectID = "glowing-market-234808"

func parseXCloudTraceContext(t string) (traceID, spanID, traceTrue string) …
Run Code Online (Sandbox Code Playgroud)

google-app-engine go stackdriver google-cloud-stackdriver

5
推荐指数
1
解决办法
450
查看次数

创建时如何按时间顺序执行Firestore查询

我建立了一个集合,并按顺序(相隔几秒钟)添加了一些文档。firestore自动生成每个doc.id。

在文档中,它说每个doc.id密钥都由一个时间戳部分和一个随机部分组成(大概是为了确保没有密钥冲突)。 编辑:我已经在不相关的博客文章上阅读了此内容,因此为了避免混淆,已将其删除。

由于如果键包含某个(隐藏的)时间顺序,是否可以基于该键进行存储查询,从而获得按时间顺序升序或降序的结果集?

firebase google-cloud-firestore

4
推荐指数
1
解决办法
2388
查看次数

是否应该为 404 和 204 响应设置 Content-Type 标头?

我计划使用 HTTPHEAD /products/{product_id}请求作为一种低带宽方式来确定产品是否存在。

如果是这样,我打算返回204 No Content。如果没有,我打算返回404 Not Found

在我的 HTTP 服务中,有一些中间件添加了Content-Type: application/json.

最后的回应是

HTTP/1.1 204 No Content
Content-Type: application/json
Vary: Origin
Date: Wed, 07 Aug 2019 16:50:08 GMT
Run Code Online (Sandbox Code Playgroud)

所有其他资源都返回 JSON 响应。我应该删除Content-Type页眉和它很重要的204404式的反应?

rest http

3
推荐指数
1
解决办法
1822
查看次数

去os.Exit(2)显示bash $?值1

我使用编写了一个简短的Go程序,os.Exit(2)并从Bash shell运行了该程序。

输入echo $?时,1无论传递到的退出值如何,它都会显示的值os.Exit

的bash脚本下面示出了$?的值2一样的C程序。

为什么Go程序总是显示值1?如何使用除0或以外的代码退出1,并且应该使用此方法指示不同的退出状态?

package main

import "os"

func main() {
    os.Exit(2)
}
Run Code Online (Sandbox Code Playgroud)
#!/bin/bash

exit 2
Run Code Online (Sandbox Code Playgroud)
#include <stdlib.h>

int main() {
    exit(2);
}

Run Code Online (Sandbox Code Playgroud)

exit go

2
推荐指数
1
解决办法
123
查看次数