如何在Rocket环境中建立数据库连接?

问题描述 投票:0回答:3

我的 Rocket 应用程序有以下工作数据库连接设置:

main.rs:

#[database("my_db")]
pub struct DbConn(diesel::PgConnection);

Rocket.toml:

[global.databases]
my_db = { url = "postgres://user:pass@localhost/my_db" }

我想从环境中设置用户名、密码和数据库名称。预计会是

ROCKET_MY_DB=postgres://user:pass@localhost/my_db
之类的东西,但没有成功。无法找到 Rocket 的相关数据库示例。

database rust settings rust-rocket
3个回答
10
投票

经过大量实验(因为数据库没有具体说明,我期望看起来更像标准方法的东西:

ENV_PARAM=conn_string
,即在 Diesel 中)我终于发现我需要将一个复杂的对象放入环境。

解决方案是这个丑陋的字符串:

ROCKET_DATABASES={my_db={url="postgres://user:pass@localhost/my_db"}}


0
投票

我想从环境中设置用户名、密码和数据库名称。没有找到Rocket相关的例子。

文档

的首页

Rocket 和 Rocket 库通过 Rocket.toml 文件和/或 ROCKET_{PARAM} 环境变量进行配置。有关如何配置 Rocket 的更多信息,请参阅指南的配置部分以及配置模块文档。

示例只需点击链接:

所有配置参数,包括额外参数,都可以通过环境变量覆盖。要覆盖配置参数 {param},请使用名为 ROCKET_{PARAM} 的环境变量。例如,要覆盖“端口”配置参数,您可以使用以下命令运行应用程序:

ROCKET_PORT=3721 ./your_application

🔧  Configured for development.
    => ...
    => port: 3721 ```

0
投票

接受的答案有效,但如果您想避免火箭需要特殊格式的环境变量,您也可以在启动火箭之前更新虚构的内容。

例如:

#[launch]
async fn rocket() -> _ {
    let figment = rocket::Config::figment().merge((
        "databases.my_db.url",
        env::var("DATABASE_URL").expect("DATABASE_URL must be set"),
    ));

    rocket::custom(figment) // equivalent to rocket::build()
}
© www.soinside.com 2019 - 2024. All rights reserved.