我的 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 的相关数据库示例。
经过大量实验(因为数据库没有具体说明,我期望看起来更像标准方法的东西:
ENV_PARAM=conn_string
,即在 Diesel 中)我终于发现我需要将一个复杂的对象放入环境。
解决方案是这个丑陋的字符串:
ROCKET_DATABASES={my_db={url="postgres://user:pass@localhost/my_db"}}
的首页我想从环境中设置用户名、密码和数据库名称。没有找到Rocket相关的例子。
Rocket 和 Rocket 库通过 Rocket.toml 文件和/或 ROCKET_{PARAM} 环境变量进行配置。有关如何配置 Rocket 的更多信息,请参阅指南的配置部分以及配置模块文档。
示例只需点击链接:
所有配置参数,包括额外参数,都可以通过环境变量覆盖。要覆盖配置参数 {param},请使用名为 ROCKET_{PARAM} 的环境变量。例如,要覆盖“端口”配置参数,您可以使用以下命令运行应用程序:
ROCKET_PORT=3721 ./your_application 🔧 Configured for development. => ... => port: 3721 ```
接受的答案有效,但如果您想避免火箭需要特殊格式的环境变量,您也可以在启动火箭之前更新虚构的内容。
例如:
#[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()
}