2

I have a Postgres database running at the following url

postgresql://postgres:postgres@localhost:5432/my_db

I am able to connect to it using pgAdmin and psql

psql postgresql://postgres:postgres@localhost:5432/my_db

I have the following Cargo.toml file

[dependencies]
rocket = { version = "0.5.0-rc.3", features = ["json"] }

[dependencies.rocket_db_pools]
version = "=0.1.0-rc.3"
features = ["sqlx_postgres"]

[default.databases.my_db_name]
url = "postgresql://postgres:postgres@localhost:5432/my_db"

and this minimal rocket server

#[macro_use]
extern crate rocket;

use rocket::serde::json::Json;
use rocket_db_pools::{sqlx, Connection, Database};

#[derive(Database)]
#[database("my_db_name")]
struct MyDB(sqlx::PgPool);

#[get("/test")]
async fn test(
    mut _db: Connection<MyDB>,
) -> Result<Json<()>, Json<()>> {
    Ok(Json(()))
}

#[launch]
fn rocket() -> _ {
    rocket::build()
        .mount("/", routes![test]) 
        .attach(MyDB::init())  
}

It feels like this exemple follows the documentation, but when running it I get the following

Error: failed to initialize database: bad configuration: missing field `url`
Error: Rocket failed to launch due to failing fairings:
   >> 'my_db' Database Pool
thread 'main' panicked at 'aborting due to fairing failure(s)', 
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

How can I know why isn't rocket_db_pools finding the URL field ?

cafce25
  • 15,907
  • 4
  • 25
  • 31
lblenner
  • 372
  • 2
  • 14

1 Answers1

4

You have to provide the configuartion for rocket in a file called Rocket.toml, not in the Cargo.toml as the docs state:

By default, configuration can be provided in Rocket.toml

cafce25
  • 15,907
  • 4
  • 25
  • 31
  • If you use workspaces: `Rocket.toml` must not be in the folder of the workspace member but in the root (next to `Cargo.lock`). – auipga Aug 06 '23 at 17:39