我正在试图弄清楚如何将我的Rust应用程序连接到在 docker 容器内运行的surrealdb数据库.

SurrealDB网站上的文档只指定了三种连接数据库的方法,它们是:内存、文件和tikv.

我正在他们的网站上运行docker上的surrealdb:

docker run --rm -p 8000:8000 surrealdb/surrealdb:latest start

我试着做了下面这样的事情:

let ds = Datastore::new("http://0.0.0.0:8000").await?;

但我收到以下错误:

value: Ds("Unable to load the specified datastore")'

可能还没有实施呢?

推荐答案

You are using the wrong library!机箱surrealdb只能用于启动SurrealDB的数据库实例.但它不是一个客户端库.

官方客户端库机箱称为surrealdb-rs.

您可以通过以下方式将其添加到您的项目中:

(⚠️的 crate 是not,但在crates.io上发布.你还不能用cargo add下载.(⚠️)

cargo add surrealdb-rs

我还建议您在启动数据库时为根用户设置密码.否则,您可能会遇到身份验证问题.

docker run --rm -p 8000:8000 surrealdb/surrealdb:latest start --pass root

现在,您将使用Surreal::connect()连接到正在运行的数据库.

use surrealdb_rs::{Result, Surreal};
use surrealdb_rs::param::Root;
use surrealdb_rs::protocol::Ws;

#[tokio::main]
async fn main() -> Result<()> {
    let client = Surreal::connect::<Ws>("localhost:8000").await?;

    // Signin as a namespace, database, or root user
    client.signin(Root {
        username: "root",
        password: "root",
    }).await?;
}

在官方库在crates.io上可用之前,您可以查看surreal-simple-client.但我建议你还是等官方图书馆吧.

Rust相关问答推荐

如果死 struct 实现了/派生了一些特征,为什么Rust会停止检测它们?

无法实现整型类型的泛型FN

程序在频道RX上挂起

Rust编译器似乎被结果类型与anyhow混淆

是否可以使用Serde/Rust全局处理无效的JSON值?

当我编译 Rust 代码时,我是否缺少 AVX512 的目标功能?

在没有任何同步的情况下以非原子方式更新由宽松原子操作 Select 的值是否安全?

我可以禁用发布模式的开发依赖功能吗?

一旦令牌作为文字使用,声明宏不匹配硬编码值?

没有明确地说return会产生错误:match arms have incompatible types

如何从 rust 中的同一父目录导入文件

在 Rust 中使用 `SecTrustSettingsSetTrustSettings` 绑定导致 `errSecInternalComponent`

当你删除一个存在于堆栈中的值时,为什么 rust 不会抱怨

在 Rust 中如何将值推送到枚举 struct 内的 vec?

Rust 中函数的类型同义词

有没有更好的方法来为拥有 DIsplay 事物集合的 struct 实现 Display?

如何从 many0 传播 Nom 失败上下文?

Rust 为什么 (u32, u32) 的枚举变体的大小小于 (u64)?

C++ 中的 CRTP 是一种表达其他语言中特征和/或 ADT 的方法吗?

Rust 生命周期:不能在方法内重新borrow 可变字段