#diesel #web #actix-actor #actix

actix-diesel-actor

一个接受封装在Actix消息中的diesel查询的actor

3个版本

0.1.2 2019年8月8日
0.1.1 2019年5月10日
0.1.0 2019年2月8日

数据库接口 中排名第2385

每月下载量27

MIT/Apache

11KB
142

Actix Diesel Actor

将diesel查询打包到actix消息中

提供消息类型,用于将diesel查询打包到actix消息中。提供actor来处理这些消息并执行查询。

SQuery消息可用于任何完整的diesel查询,并实现了diesel SelectQuery。当你的应用需要对数据库的只读副本进行读取操作时,这很有用。WQuery除了SELECT之外,还接受INSERT、UPDATE、DELETE等写操作。这可以用于通用目的或当你的数据库集群有许多副本和一个可写的master数据库时。

数据库连接可以通过环境变量进行配置,因此你可以从你的集群配置工具(如Kubernetes)将数据库连接传递到应用程序。

目前它只支持PostgreSQL。

用法

创建actix-web应用的辅助工具

    pub use actix_diesel_actor as db;
    let sys = actix::System::new("my_actix_sys");

    let raddr = db::db_setup(db::ConnectionType::Read);
    let waddr = db::db_setup(db::ConnectionType::Write);

    // routes need to be defined in a most specific to least specific order
    server::new(move || {
        vec![
        App::with_state(db::AppState{rdb: raddr.clone(), wdb: waddr.clone()})
        ...
        ]
    })
    .bind(bind_url)
    .unwrap()
    .run();
    let _ = sys.run();

在处理程序中使用它

pub fn index(req: &HttpRequest<AppState>) -> Result<HttpResponse, crate::db::DbExecutorError> {
    let query = users.filter(user_id.is_not_null());
    let select = SQuery{ select: query, phantom: PhantomData::<User> };
    let usr_list = req.state().rdb.send(select)
        .wait()??;
    println!("{:?}",usr_list);
    Ok(HttpResponse::Found().finish())
}

许可证

根据以下之一许可

贡献

除非你明确表示,否则任何你故意提交以包含在作品中的贡献,如Apache-2.0许可证中定义的,应如上所述双许可,不附加任何额外的条款或条件。

依赖关系

~13–19MB
~254K SLoC