diesel.rs 和rocket.rs:不明白为啥它需要一个数据库表

Posted

技术标签:

【中文标题】diesel.rs 和rocket.rs:不明白为啥它需要一个数据库表【英文标题】:diesel.rs and rocket.rs: don't understand why it wants a databases tablediesel.rs 和rocket.rs:不明白为什么它需要一个数据库表 【发布时间】:2021-04-16 09:19:42 【问题描述】:

我是 Rust 新手,遇到了一个无法解决的问题。

我的Cargo.toml 看起来像这样:

[dependencies]
rocket = "0.4.6"
rocket_codegen = "0.4.6"
serde = "1.0"
serde_derive = "1.0"
serde_json = "1.0"

[dependencies.diesel]
version = "1.0.0"
default-features = false
features = ["sqlite"]

[dependencies.rocket_contrib]
version = "0.4.6"
default-features = false
features = ["diesel_sqlite_pool"]

[global.databases.urls_db]
url = "urls.sqlite"

我在main.rs 上有这样的连接:

use rocket_contrib::databases::diesel;

#[database("urls_db")]
struct UrlsDbConn(diesel::SqliteConnection);

根据schema.rs,我拥有的唯一一张桌子是urls

table! 
    urls (id) 
        id -> Text,
        uri -> Text,
    

但是当我尝试cargo run 时,我得到了:

Error: Database configuration failure: 'urls_db'
    => Error: A table named `databases` was not found for this configuration

知道为什么吗?

我唯一拥有databases(复数)字符串的地方是Cargo.tomlglobal.databases.urls_db),这是rocket.rs 指示设置它的方式...


编辑:修正错字; EDIT2:数据库本身似乎很好:

main: /Users/carlos/Developer/caarlos0/beckerly/beckerly/urls.sqlite
sqlite> .tables
__diesel_schema_migrations  urls
sqlite> select * from urls;
sqlite> insert into urls(id, uri) values ('g', 'https://google.com');
sqlite> select * from urls;
g|https://google.com
sqlite>

【问题讨论】:

你检查过sqlite中是否存在数据库名my_db 会不会是Sqlite需要的东西? 我认为数据库应该没问题,它运行迁移就好了 (create table)... 我认为错误是指“表”,就像在 TOML 配置的一部分中一样。此外,my_db 字符串是从哪里来的?可能是这里的名称之间的差异:urls_dbmy_db 我对 Rocket 不太了解,但您不应该使用 Rocket.toml 而不是 Cargo.toml 进行数据库配置吗? 【参考方案1】:

数据库配置应该在Rocket.toml 文件中:

[global.databases]
urls_db =  url = "urls.sqlite" 

文档清楚地说明了这一点:

然后,在 Rocket.toml 或通过环境变量等效的文件中,在数据库表中配置数据库的 URL:

【讨论】:

以上是关于diesel.rs 和rocket.rs:不明白为啥它需要一个数据库表的主要内容,如果未能解决你的问题,请参考以下文章

Rust,Windows 10:柴油机不工作,柴油机设置不提供输出

柴油文档中的 `tags` 变量来自啥?

遵循“入门”柴油教程,但使用 sqlite,原因

为啥我发布的端口不起作用?

我是编码的新手,我不明白为零

eclipse 每次为 对象 和 变量 点 之后不明白的问题