在本次实践研讨会中,我们将指导您完成使用 Rust 作为 API、Actix-Web 作为 Web 框架、SQLx 用于数据库连接、Dioxus 用于前端以及 Shuttle 用于部署来构建全栈应用程序的过程。本研讨会假设您对 Rust 及其语法有基本的了解。
在整个研讨会中,您将学习如何使用 Actix-Web 设置 Rust 项目,实现电影的 CRUD 操作,使用 SQLx 与 PostgreSQL 建立数据库连接,使用 Dioxus 设计响应式前端,以及使用Shuttle将应用程序部署到托管环境。
在研讨会结束时,你将建立一个实用的电影收集管理器应用程序。你将了解如何用Actix-Web创建API,用SQLx处理数据库,用Dioxus设计和开发前端,以及用Shuttle部署应用。本工作坊将为你提供使用Rust构建全栈应用程序的实践经验和见解。
详细点击标题, 以下摘录:
先决条件:
- Rust 编程语言的基础知识
- 熟悉 HTML、CSS 和 JavaScript 会有所帮助,但不是必需的
步骤描述:
1. 安装Rust、Cargo和其他依赖项 |
包存储结构:
├── api # Rust API code |
工具:
使用Visual Studio Code作为我们的代码编辑器。
如果您也想使用Visual Studio Code,请安装以下扩展插件:
Shuttle
这是我们要用来部署后端(api和数据库)的工具和平台。
cargo install cargo-shuttle
Dioxus
Dioxus是我们要用来构建前端的框架。
请务必安装Dioxus CLI:
cargo install dioxus-cli
之后,确保Rust的wasm32-unknown-unknown目标已经安装:
rustup target add wasm32-unknown-unknown
Docker
我们还需要安装Docker,以便在开发后端时进行本地部署。
DBeaver
我们将使用DBeaver连接到数据库并运行查询。你可以自由地使用你喜欢的任何其他工具。
cargo-watch
我们还将使用cargo-watch在我们对代码进行修改时自动重新编译我们的后端。
cargo install cargo-watch
cargo-make
最后,我们来安装cargo-make:
cargo install cargo-make
我们将利用cargo-make来运行所有我们需要运行的命令,以便构建和部署我们的后端和前端。
GitHub 存储库,其中包含带有测试、模拟、内存数据库、CI/CD 等的最终代码。
创建工作区
为项目创建一个新文件夹,并通过创建包含以下内容的文件来初始化新工作区:Cargo.toml
[workspace] |
初始化存储库
让我们为我们的项目初始化一个新的 git 存储库。
git init
创建crate
现在我们有了一个工作区,我们可以创建将成为其中一部分的crate。
对于API,我们将创建两个 crate:
- lib:包含 API 代码的库。
- shuttle:可执行shuttle 项目。
拥有两个不同的crate是完全可有可无的,但这将使我们有一个更干净的项目结构,而且如果我们决定将来不使用Shuttle,也会使我们更容易重用API库代码。
Shuttle将使我们能够在本地运行我们的API,并以最小的努力将其部署到云端,但它不是构建API的必要条件。
我们可以决定使用一个不同的可执行文件来运行我们的API,该文件将使用lib crate作为一个依赖项。例如,我们可以直接使用Actix-web来创建这样一个二进制文件,并将其作为Docker镜像发布。
创建lib crate
让我们通过运行以下命令来创建lib crate:
cargo new api/lib --name api-lib --lib --vcs none
注意,我们使用 --lib 标志来创建一个库crate。如果你忘记添加这个标志,你将不得不手动修改Cargo.toml文件,使其成为一个库crate。
在这种情况下,vsc标志是用来告诉cargo不要初始化一个新的git仓库。记住,我们在上一步已经做了这个。
创建Shuttle crate
让我们通过运行以下命令来创建shuttle crate:
cargo shuttle init api/shuttle -t actix-web --name api-shuttle
创建shared包crate
最后,让我们shared通过运行以下命令来创建包:
cargo new shared --lib
构建项目:
让我们构建该项目以确保一切都按预期工作。
cargo build
如您所见,一个新target文件夹已创建。该文件夹包含工作区中所有 crate 的编译代码,这就是我们看到如此多对象要提交的原因。
shuttle编码
打开api/shuttle文件夹并查找该src/main.rs文件。这是我们应用程序的入口点。
你会看到这样的东西:
use actix_web::{get, web::ServiceConfig}; |
Shuttle为我们生成了一个简单的hello-world Actix-web应用程序。
正如您所看到的,它非常简单。
该actix_web函数是我们应用程序的入口点。它返回一个实例, ShuttleShuttleActixWeb将使用该实例来运行我们的应用程序。
在此函数中,我们将配置不同的路由。目前我们只有一条路线:/,它映射到hello_world函数。
在项目的根目录中,运行以下命令:
cargo shuttle run
访问localhost:8000
应该在屏幕上看到一条问候语!
使用 Shuttle 进行部署
到目前为止,一切都很好。我们有一个可用的 API,并且可以在本地运行它。现在,让我们将其部署到云端,看看使用 Shuttle 是多么容易做到这一点。
转到工作区的根目录并创建一个Shuttle.toml包含以下内容的文件:
name = "name_you_want"
现在我们有了一个Shuttle.toml文件,我们可以将 API 部署到云端。为此,请运行以下命令:
cargo shuttle deploy
应该会收到错误消息。
需要登录,运行 cargo shuttle login
请注意,您需要拥有GitHub帐户才能登录:
运行cargo shuttle login命令时,您将被重定向到这样的Shuttle页面,以便您可以授权Shuttle访问您的GitHub帐户。
现在我们已经登录了,我们可以将 API 部署到云端。
1、我们需要创建项目环境:
cargo shuttle project start
完成此操作后,如果您想再次部署,则无需再次执行此步骤。
2、部署请运行以下命令:
cargo shuttle deploy
您应该在终端中看到所有内容是如何在Shuttle云中部署和编译的。这可能需要一段时间。
访问:curl https://<your_project_name>.shuttleapp.rs
我们已将 API 部署到云端!
详细点击标题