9个版本
新版本 0.2.0 | 2024年8月19日 |
---|---|
0.1.7 | 2024年8月4日 |
0.1.5 | 2024年7月31日 |
0.1.2 | 2024年6月27日 |
#441 in HTTP服务器
663 每月下载量
26KB
550 行
Velvet
(原始仓库:https://github.com/raffaeleragni/velvet)
重新包装和发布了一系列crates,以创建一个一致的、单一视角的特定Web栈。这并不是为了成为一个具有特定目的的库,而只是简化了常见设置和结构的样板。
关于使用它的项目参考/示例:https://github.com/raffaeleragni/veltes
使用的栈
模板和静态文件将被编译到二进制文件中,并且这些目录在运行时不需要。
栈的元素
- WEB: Axum
- DB: sqlx(postgres)
- 模板化: Askama (文件夹 templates/)
- 遥测: 支持sentry
基本路由设置
use velvet::prelude::*;
fn index() -> &'static str {
"Hello world"
}
#[tokio::main]
async fn main() {
App::new()
.router(Router::new().route("/", get(index)))
.start()
.await;
}
添加数据库
use velvet::prelude::*;
fn index(Extension(db): Extension<Pool<Postgres>>) -> &'static str {
let result = query_as!(String, "select 1").fetch_one(&db).await?;
result
}
#[tokio::main]
async fn main() {
let db = database().await;
App::new()
.router(Router::new().route("/", get(index))
.inject(db)
.start()
.await;
}
支持静态文件
示例
use velvet::prelude::*;
#[tokio::main]
async fn main() {
#[derive(RustEmbed)]
#[folder = "statics"]
struct S;
App::new()
.statics::<S>()
.start()
.await;
}
在哪里找到...
- 状态(无操作): http GET /status/liveness
- 指标: http GET /metrics/prometheus
环境变量
- SERVER_BIND: 监听ip
- SERVER_PORT: [number] 监听端口
- DATABASE_URL: postgres://user:pass@host:port/database (如果使用数据库)
- DATABASE_MAX_CONNECTIONS: [number] (默认1)
- STRUCTURED_LOGGING: true|false (默认false)
- SENTRY_URL: 发送遥测到sentry的url(包括密钥)
要设置TLS,请使用环境变量
- TLS=true (或任何字符串)
- TLS_PEM_CERT=cert.pem
- TLS_PEM_KEY=key.pem
依赖项
~34–54MB
~1M SLoC