firebase.firestore.FieldValue.serverTimestamp()
返回与 set() 或 update() 一起使用的哨兵,以在写入的数据中包含服务器生成的时间戳。
在这种情况下,“哨兵”一词究竟意味着什么?
这是否意味着该值是占位符并且时间戳将应用于服务器端?
在 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 首字母化以区分导出和未导出的字段,所以这很清楚。但是,包含“过滤”字段是什么意思(例如在上述评论的上下文中)?
我有一组云函数,它们执行类似 CRUD 的函数来获取单个资源、列出资源等等getWidgetByURL,,,, listWidgets。deleteWidget
对于更广泛的上下文,它们被编写在单个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
我的项目当前的结构使得 HTML 模板位于项目根目录中templates/。
我的 HTTP 请求处理程序位于文件系统树的下几层。
\ngo.mod\ntemplates/webpp/*.html\ntemplates/admin-dashboard/*html\ncmd/webapp/main.go\ncmd/admin-dashboard/main.go\napp/webapp/handlers/handler.go\nRun Code Online (Sandbox Code Playgroud)\n理想情况下,我希望能够按以下方式使用 go:embed:
\ngo.mod\ntemplates/webpp/*.html\ntemplates/admin-dashboard/*html\ncmd/webapp/main.go\ncmd/admin-dashboard/main.go\napp/webapp/handlers/handler.go\nRun Code Online (Sandbox Code Playgroud)\n或者
\n//go:embed ../../templates\nRun 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
我可以重新定位模板(这是我不想做的事情,因为在某些模式下我的 web 应用程序希望看到它们相对于正在运行的二进制文件)。例如
\nwebapp <-- binary uses templates at runtime\ntemplates/*.html <-- editable HTML files\nRun Code Online (Sandbox Code Playgroud)\n所以我可以让我的构建脚本在编译之前将它们复制到位,但这似乎不必要地复杂;如果我绕过构建脚本或者忘记或搞乱构建顺序,我最终可能会得到嵌入了 v1“旧模板”的 v2 二进制文件。
\n或者,我可以将templates/目录打包并导出embed.FS,然后将其作为依赖项注入到我的应用程序中,但现在我的代码被重新构造以适应嵌入过程。
go:embed 未来是否有可能允许相对于项目根进行某种类型的嵌入,或者这会引发安全问题?
\ngo:embed 是一个很棒的功能,但感觉我对它很感激——要么被迫复制、重新定位、将我的模板集拆分到单独的目录中,要么调整我的应用程序以使用依赖项注入。
\n最佳做法是什么?
\n我已经配置了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
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 个)的集合。我想以最具成本效益的方式(最少读取)导出整个集合的文档。
我有一个用 Go 编写的 API,已进行 Docker 化并在 GKE 上的 Kubernetes 集群中运行。
目前,我的 API 服务器不处理任何关闭场景,例如 Pod 死亡或被故意关闭。
我应该捕获哪组 UNIX 信号来正常关闭服务器以及什么情况会触发它们?例如崩溃、K8s 关闭等。
我在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) 我建立了一个集合,并按顺序(相隔几秒钟)添加了一些文档。firestore自动生成每个doc.id。
在文档中,它说每个doc.id密钥都由一个时间戳部分和一个随机部分组成(大概是为了确保没有密钥冲突)。
编辑:我已经在不相关的博客文章上阅读了此内容,因此为了避免混淆,已将其删除。
由于如果键包含某个(隐藏的)时间顺序,是否可以基于该键进行存储查询,从而获得按时间顺序升序或降序的结果集?
我计划使用 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页眉和它很重要的204和404式的反应?
我使用编写了一个简短的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) go ×5
firebase ×4
amazon-ses ×1
docker ×1
exit ×1
godoc ×1
http ×1
kubernetes ×1
linux ×1
postfix-mta ×1
rest ×1
signals ×1
smtp ×1
stackdriver ×1
typescript ×1