4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Rustのdiesel(r2d2)で初回DBに接続できなくても無視する方法

Last updated at Posted at 2019-04-28

結論

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は初心者なのでおかしな点があったらツッコミいただけると嬉しいです。

4
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?