結論
build_unchecked
で Pool builder を consume してあげる。
困っていたこと
Actix-web + r2d2 + diesel なんかを使ってよくある Web システムを作っている前提。
アプリケーション起動時にデータベースに接続に行くのだけれど、タイミングによっては接続に失敗する事もある。
データベースに接続できないからといって起動に失敗するのは困るので、とりあえずは無視をして処理を先に進めたい。
データベースの接続が必要になるまでに接続できていればよい。
接続に失敗すると先に進めない
use diesel::r2d2::ConnectionManager;
use diesel::PgConnection;
use r2d2::Pool;
fn main() {
// 略...
let manager =
ConnectionManager::<PgConnection>::new("postgres://postgres:password@localhost:5432/blog");
let pool: Pool<ConnectionManager<PgConnection>> = Pool::builder()
.build(manager)
.expect("Failed to create pool");
// 略...
}
解消する
上のコードで build
としているところを build_unchecked
に変えてあげる。
接続に失敗してもとりあえず進む
use diesel::r2d2::ConnectionManager;
use diesel::PgConnection;
use r2d2::Pool;
fn main() {
// 略...
let manager =
ConnectionManager::<PgConnection>::new("postgres://postgres:password@localhost:5432/blog");
let pool: Pool<ConnectionManager<PgConnection>> = Pool::builder()
.build_unchecked(manager);
// 略...
}
あとがき
このあたりのことをしばしば忘れてしまうので、自分用のメモとして残しています。
Rustは初心者なのでおかしな点があったらツッコミいただけると嬉しいです。