1个不稳定版本

0.2.0 2021年2月16日

#5 in #vercel

每月47次下载
用于 2 crates

MIT许可证

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 devvercel-rust,你可以在自己的机器上开发基于 rust 的 lambda。

在本地使用 vercel dev 开发时,假设 rustcargo 已经安装,并在你的 PATH 中可用,因为它们不会自动安装。在机器上安装 rustcargo 的推荐方法是使用 rustup

我能否使用 musl/静态链接?

不幸的是,AWS lambda 运行时对 rust 的依赖(间接地)依赖于 proc_macro,它无法在 musl 目标上编译。没有 musl,所有链接都必须是动态的。如果你有一个依赖于系统库(如 postgresmysql)的 crate,你可以使用 includeFiles 配置选项包含这些库文件,并设置必要的环境变量、配置等,以便使库能够编译。

有关更多信息,请参阅 问题 #2

为什么这个项目使用制表符而不是空格?

请参阅 这条推文

贡献

请注意,该项目以 贡献者行为准则 发布。通过参与此项目,你同意遵守其条款。

问题和拉取请求都欢迎!

设置

由于此项目包含 rust 和 node 代码,你需要安装相关依赖。如果你只在工作于 JavaScript 一侧,你只需要安装这些依赖。对于 rust 一侧也是同样的道理。

# install node dependencies
npm install

# install cargo dependencies
cargo fetch

此时,你已经设置完毕,可以开始进行编辑了!

注意:在迁移期间,测试将在我们设置 CI 之前中断!

许可证

MIT

贡献者 ✨

感谢这些可爱的人们 (表情符号键)

Mike Engel
Mike Engel

💬 💻 📖 💡 ⚠️ 👀 🚧 🎨 🚇 🤔 🖋
Antonio Nuno Monteiro
Antonio Nuno Monteiro

💬 💻 📖 💡 ⚠️ 👀 🚧 🎨 🚇 🤔 🖋
Jacob Mischka
Jacob Mischka

💻
Endre
Endre

💻

本项目遵循all-contributors规范。欢迎任何形式的贡献!

依赖项

~16MB
~289K SLoC