1个不稳定版本
0.2.0 | 2021年2月16日 |
---|
#5 in #vercel
每月47次下载
用于 2 crates
18KB
489 行
vercel-rust
基于社区的Vercel平台Rust构建器
寻找维护者
我不再使用此项目,我可以用于维护此项目的时间非常有限。如果您想帮助维护此项目,请通过问题或电子邮件与我联系。
这是一个Vercel构建器,允许您在Vercel平台上以lambda方式运行Rust代码!
这最初由Vercel现在已归档的now-builders monorepo官方提供,但后来已移动到社区维护的项目。
用法
如果您不熟悉Vercel运行时,请首先阅读运行时文档。此运行时可以像任何其他社区运行时一样使用。
{
"functions": {
"api/**/*.rs": {
"runtime": "[email protected]"
}
}
}
这是使用此运行时最简单的方法!
入口点
入口点,在这种情况下是所有匹配api/**/*.rs
的文件,用于为您创建无服务器函数。请注意,Cargo.toml
文件必须存在于与.rs
文件相同的级别。
依赖项
此Builder支持安装Cargo.toml
文件中定义的依赖项。
此外,还可以在入口点文件同一目录下存在shell build.sh
文件的情况下,在构建时安装更多系统依赖项。
未列出实用函数
实用函数可以按阻止端点列出中所述的方式创建。要使用它们,请确保在Cargo.toml
中的[lib]
中包含它们。
示例
这可能是我们的 api/user.rs
文件
use util::print_foo;
use http::{StatusCode};
use vercel_lambda::{lambda, error::VercelError, IntoResponse, Request, Response};
use std::error::Error;
fn handler(_: Request) -> Result<impl IntoResponse, VercelError> {
print_foo();
let response = Response::builder()
.status(StatusCode::OK)
.header("Content-Type", "text/plain")
.body("user endpoint")
.expect("Internal Server Error");
Ok(response)
}
// Start the runtime with the handler
fn main() -> Result<(), Box<dyn Error>> {
Ok(lambda!(handler))
}
我们的辅助工具 api/_util.rs
文件
pub fn print_foo() {
println!("foo");
}
我们的 api/Cargo.toml
可能看起来像这样
[package]
name = "index"
version = "2.0.0"
authors = ["Mike Engel <[email protected]>"]
edition = "2018"
[dependencies]
http = "0.1"
vercel_lambda = "*"
[lib]
name = "util"
path = "_util.rs"
最后我们需要一个 vercel.json
文件来指定 api/user.rs
的运行时
{
"functions": {
"api/**/*.rs": {
"runtime": "[email protected]"
}
}
}
常见问题解答
cargo 工作空间是否受到支持?
并不完全支持。当在单个项目中处理多个二进制和库时,Cargo 的工作空间特性是一个非常好的工具。但是,如果在入口点找到了 cargo 工作空间,vercel-rust 将无法构建。
为了绕过这个限制,在你的 vercel.json 文件中为工作空间中的每个代表 lambda 函数的 Cargo.toml 创建构建条目。在你的 .vercelignore 中,你应该添加任何不需要用于你的 lambdas 的二进制或库项目文件夹,以加快构建过程,就像你的 Cargo.toml 工作空间一样。
还建议在你的 lambda Cargo.toml 文件旁边有一个 Cargo.lock 文件来加快构建过程。你可以在包含 lambda 的每个项目文件夹中运行 cargo check 或类似命令来实现这一点。
如果你有充分的理由让 vercel-rust 支持工作空间,而这个解决方案又太繁琐,请提交一个问题!我们一直在寻找反馈。
我如何在本地开发中使用这个工具?
vercel dev
命令允许你在本地机器上开发 lambda。使用 vercel dev
和 vercel-rust
,你可以在自己的机器上开发基于 rust 的 lambda。
在本地使用 vercel dev
开发时,假设 rust
和 cargo
已经安装,并在你的 PATH
中可用,因为它们不会自动安装。在机器上安装 rust
和 cargo
的推荐方法是使用 rustup。
我能否使用 musl/静态链接?
不幸的是,AWS lambda 运行时对 rust 的依赖(间接地)依赖于 proc_macro
,它无法在 musl 目标上编译。没有 musl
,所有链接都必须是动态的。如果你有一个依赖于系统库(如 postgres
或 mysql
)的 crate,你可以使用 includeFiles
配置选项包含这些库文件,并设置必要的环境变量、配置等,以便使库能够编译。
有关更多信息,请参阅 问题 #2。
为什么这个项目使用制表符而不是空格?
请参阅 这条推文。
贡献
请注意,该项目以 贡献者行为准则 发布。通过参与此项目,你同意遵守其条款。
问题和拉取请求都欢迎!
设置
由于此项目包含 rust 和 node 代码,你需要安装相关依赖。如果你只在工作于 JavaScript 一侧,你只需要安装这些依赖。对于 rust 一侧也是同样的道理。
# install node dependencies
npm install
# install cargo dependencies
cargo fetch
此时,你已经设置完毕,可以开始进行编辑了!
注意:在迁移期间,测试将在我们设置 CI 之前中断!
许可证
贡献者 ✨
感谢这些可爱的人们 (表情符号键)
Mike Engel 💬 💻 📖 💡 ⚠️ 👀 🚧 🎨 🚇 🤔 🖋 |
Antonio Nuno Monteiro 💬 💻 📖 💡 ⚠️ 👀 🚧 🎨 🚇 🤔 🖋 |
Jacob Mischka 💻 |
Endre 💻 |
本项目遵循all-contributors规范。欢迎任何形式的贡献!
依赖项
~16MB
~289K SLoC