小编Jam*_*aly的帖子

如何模拟Capybara中的浏览器后退按钮?

我们的电子商务网站上存在一个问题,即用户偶尔会两次点击"结帐",并且会对其卡进行两次充值.

这是一个常见的错误,容易修复,但我想在我们的水豚设置中测试解决方案.一旦我调用click_button('checkout'),我是否可以假装我是用户点击浏览器后退按钮然后再次调用click_button('checkout')?

ruby testing ruby-on-rails capybara

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

我可以在Kohana中设置路由以仅匹配特定的HTTP方法(GET/POST/etc)

我正在探索一些PHP框架,目前的领跑者是Kohana.

拥有Rails背景我已经习惯了rails社区所谓的"RESTful"路由.因此,"GET/posts"显示所有帖子,并由帖子控制器的索引方法处理."POST/posts"创建一个新的post对象,并由Posts Controller的不同方法处理.

由于这两个请求中的路径相同,因此路由器需要根据HTTP方法做出决策.

Kohana的路由器是否能够做到这一点?

php rest kohana

8
推荐指数
1
解决办法
1938
查看次数

是否可以在Google Kubernetes Engine上安装短暂的磁盘上存储?

我希望我的pod中的容器共享临时(缓存)数据的卷.我不介意当pod终止时数据是否丢失(实际上,我希望删除数据并回收空间).

kubernetes文档做出emptyDir听起来像我想要的东西:

将Pod分配给节点时,首先会创建一个emptyDir卷,只要Pod在该节点上运行,就会存在

..和

默认情况下,emptyDir卷存储在支持节点的任何介质上 - 可能是磁盘或SSD或网络存储,具体取决于您的环境.但是,您可以将emptyDir.medium字段设置为"Memory",以告知Kubernetes为您安装tmpfs(RAM支持的文件系统)

这听起来像默认行为是将卷存储在磁盘上,除非我明确请求内存.

但是,如果我在GKE集群上创建以下pod:

apiVersion: v1
kind: Pod
metadata:
  name: alpine
spec:
  containers:
  - name: alpine
    image: alpine:3.7
    command: ["/bin/sh", "-c", "sleep 60m"]
    volumeMounts:
      - name: foo
        mountPath: /foo
  volumes:
  - name: foo
    emptyDir: {}
Run Code Online (Sandbox Code Playgroud)

..然后在pod上打开一个shell并将2Gb文件写入卷:

kubectl exec -it alpine -- /bin/sh
$ cd foo/
$ dd if=/dev/zero of=file.txt count=2048 bs=1048576
Run Code Online (Sandbox Code Playgroud)

然后我可以在GKE Web控制台中看到容器的RAM使用量增加了2Gb:

高山contianer记忆力增加

在我看来emptyDir,默认情况下,GKE将内存卷存储在内存中.我计划运行的工作负载需要大量内存,所以我希望emptyDir磁盘支持卷 - 这可能吗?该GKE存储文档没有太多在这个问题上说.

另一种方法可能是使用一个本地SSD为我的缓存数据,但是如果我将它们安装在与GKE文档他们由同一个节点上运行的所有豆荚共享和数据不上荚终止清理建议,这不符合我自动管理资源的目标.

坐骑

这是df -h容器内部的输出:

# …
Run Code Online (Sandbox Code Playgroud)

docker google-cloud-platform kubernetes google-kubernetes-engine

8
推荐指数
1
解决办法
1302
查看次数

我可以使用服务帐户和用户凭据对 gcloud cli 进行身份验证吗?

Google API 客户端通常会识别GOOGLE_APPLICATION_CREDENTIALS环境变量。如果找到,它应该指向带有服务帐户或用户凭据的 JSON 文件。

可以从 GCP Web 控制台下载服务帐户凭据,如下所示:

{
  "type": "service_account",
  "project_id": "...",
  "private_key_id": "...",
  "private_key": "...",
  "client_email": "...",
  "client_id": "...",
  "auth_uri": "...",
  "token_uri": "...",
  "auth_provider_x509_cert_url": "...",
  "client_x509_cert_url": "..."
}
Run Code Online (Sandbox Code Playgroud)

用户凭据通常可用~/.config/gcloud/application_default_credentials.json,如下所示:

{
  "client_id": "...",
  "client_secret": "...",
  "refresh_token": "...",
  "type": "authorized_user"
}
Run Code Online (Sandbox Code Playgroud)

这是官方 google ruby​​gem检测通过环境 var 提供的凭据类型的示例。

我想使用两种类型的凭据对未配置的 gcloud 安装进行身份验证。在我们的例子中,我们碰巧将GOOGLE_APPLICATION_CREDENTIALS变量和路径传递到 docker 容器中,但我认为这对于 docker 外部的干净安装也是一个有效的问题。

如果凭据文件是服务帐户类型,我可以这样做:

gcloud auth activate-service-account --key-file=${GOOGLE_APPLICATION_CREDENTIALS}
Run Code Online (Sandbox Code Playgroud)

但是,我看不到任何方法来处理凭据属于真实用户的情况。

问题:

  1. 为什么官方 gcloud 工具不遵循其他 google API 客户端使用的约定并GOOGLE_APPLICATION_CREDENTIALS在可用时使用?
  2. 是否有隐藏的方法可以激活用户凭据案例?

gcloud gcloud-cli

8
推荐指数
1
解决办法
7950
查看次数

在django中放置额外启动代码的正确位置?

我希望在我的django进程启动时运行一些环境检查,并在发生错误时大声死亡.我在想数据库的编码不正确,或者机器有我们不支持的python版本.

我宁愿我们的团队面临他们必须解决的致命错误,而不是能够忽略它.

我写这些支票很好,但我很好奇最好放的地方在哪里.如何让它们作为django启动过程的一部分执行?我以为可能有一个我可以听的信号,但我在文档中找不到相关的信号.

python django

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

我可以配置 Google 容器注册表 (GCR) 以允许推送新映像但不允许更改标签吗?

我想在 GCP 上配置我们公司的容器注册表:

  • 允许员工推送带有新标签的新图片
  • 不允许替换现有标签

目标是避免使用latest标签 - 或任何其他可变标签 - 并始终为新图像使用新的、不可变的标签。

是否有一组 IAM 角色或权限可以实现此行为?

google-cloud-platform google-container-registry

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

我可以使用Gstreamer API合并2个视频吗?

我想写一个简单的Linux CLI应用程序,可以拍摄2个视频源(1个演示者讲话,1个幻灯片,没有音频)并合并它们.

我希望整个输出视频是两个原创视频,并排.如果做不到这一点,我的第二个最佳选择将是"画中画"风格的视频,主持人在角落里的一个小框架中.

从几个小时研究,GStreamer的看起来可能能够做到这一点.任何人都可以在我花更多时间尝试之前确认吗?

如果不能,那么我可以使用其他API吗?

video video-processing gstreamer

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