如何使用 ruby​​ event_store_client 发布事件?

问题描述

我正在关注 event_store_client 上的文档以使用 EventStore DB 设置发布/订阅系统,但我无法发布事件。

以下是我目前采取的步骤:

  • 我最初尝试在不安全模式下将服务器设置为 Docker 容器:服务器启动后,我可以访问管理 UI(无需身份验证),但随后客户端尝试连接 SSL 失败,但我没有找到了一种在客户端禁用安全性的方法
  • 然后我尝试使用 gem 中提供的脚本启动服务器,但 docker-sync 出现问题,服务器无法启动。
  • 最后,我复制了脚本中的步骤,创建了自签名证书,然后我可以使用首选的 gRPC 协议启动服务器并使客户端安全地连接。

我能够按照教程步骤进行操作

event_store.publish(stream: 'newstream',events: [event])

然后我收到以下错误

ArgumentError: wrong number of arguments (given 1,expected 0)
from /usr/local/bundle/gems/event_store_client-1.0.8/lib/event_store_client/event.rb:17:in `initialize'

我试图查看堆栈跟踪后的源代码,但我找不到那个调用有什么问题。 event 对象似乎已正确初始化,而且我很确定连接也已正确建立(我收到另一个使用不同凭据的错误)。

非常感谢任何建议,谢谢。 :-)

解决方法

从 1.0.8 版开始,event_store_client 似乎与 Ruby 3.0.0 不兼容。问题可能是由对 dry-struct 1.4.0 的依赖引起的,或者是由初始化 EventStoreClient::Event 时传递属性的方式引起的。

现在我将坚持使用 Ruby 2.7.3,使用它的示例可以按照文档工作,并在我最终升级到 Ruby 3 后更新此问答。