问题描述
我正在尝试使用 tera 在 Rust 中构建一个网络应用程序,每次在下面的 render()
调用中都会出现恐慌。代码块示例:
async fn login(tera: web::Data<tera>) -> impl Responder {
let mut data = Context::new();
data.insert("title","Login");
let rendered = tera.render("login.html",&data).unwrap();
HttpResponse::Ok().body(rendered)
}
链接到我的存储库进行查看:https://github.com/ClusterberrySquirrels/oasis/blob/oasis_db/src/main.rs
我收到以下紧急通知:
thread 'actix-rt:worker:0' panicked at 'called `Result::unwrap()` on an `Err` value: Error { kind: TemplateNotFound("login.html"),source: None }',src/main.rs:101:53
当我在 index.html
页面上的这个项目开始时遇到同样的问题时,我解决了这个恐慌。起初我以为是 tera 导致了问题,但我没有找到任何解决方法。最终我做的事情使它按预期运行,直到现在一切都很好。如果您就如何解决此问题并避免将来发生这种情况提供任何建议,我将不胜感激。
文件结构:
Project Folder\
templates\
login.html
index.html
src\
main.rs
我这边的问题不一定按顺序解决:
- 将默认工具链从稳定 -> 货物构建/运行切换到每晚 -> 货物构建/运行并返回。
- 生锈更新
- sudo apt 更新
- sudo apt 升级
- wsl --set-default-version 2
- 货物清洁
- 删除目标文件夹,然后cargo clean、cargo build、cargo run
- 货物更新
问题更新:最小可重复示例。
use actix_web::{HttpServer,App,web,HttpResponse,Responder};
use tera::{tera,Context};
async fn index(tera: web::Data<tera>) -> impl Responder {
let mut data = Context::new();
let posts = [
Post {
title: String::from("This is the first link"),link: String::from("https://example.com"),author: String::from("Nutrition-Tracker"),},Post {
title: String::from("This is the second Link"),author: String::from("Other cool app"),];
data.insert("title","index");
data.insert("posts",&posts);
let rendered = tera.render("index.html",&data).unwrap(); // TemplateNotFound??
HttpResponse::Ok().body(rendered)
}
async fn login(tera: web::Data<tera>) -> impl Responder {
let mut data = Context::new();
data.insert("title",&data).unwrap(); // TemplateNotFound??
HttpResponse::Ok().body(rendered)
}
#[actix_web::main]
async fn main() -> std::io::Result<()> {
HttpServer::new(|| {
let tera = tera::new("templates/**/*").unwrap();
App::new()
.data(tera)
.route("/",web::get().to(index))
.route("/login",web::get().to(login))
})
.bind("127.0.0.1:8000")?
.run()
.await
}
解决方法
我发现了这个问题。我也在为这个应用程序运行 kubernetes,我选择的端口被 kubernetes 随机占用。然而,我杀死了所有进程,问题仍然存在,这是另一个线程的问题。