7 个版本

0.2.0 2024 年 6 月 23 日
0.1.2 2024 年 5 月 2 日
0.1.1 2024 年 4 月 17 日
0.0.3 2024 年 4 月 14 日
0.0.2 2023 年 8 月 26 日

632Web 编程

MIT 许可证

67KB
1.5K SLoC

Rust 1K SLoC // 0.0% comments Tera 140 SLoC

博客工具

blog-tools 是一组帮助在 Rust 中制作博客的工具。

要使其工作,您应该有一个文件夹,例如,blog 作为根目录。在此文件夹内,您必须有以下结构

  • blog
    • 2023
      • 2023-01-01
        • my_first_blog.json
        • my_first_blog.md
      • (其他文件夹)

即按年份组织,按日期(yyyy-mm-dd)组织,然后在 blog.mdblog.json 旁边。

JSON 必须符合以下模式

{
"title": String,
"date": ISO 8601 Date i.e. YYYY-MM-DD,
"desc": Optional<String>,
"slug": String,
"tags": [String],
"keywords": Optional<[String]>,
"canonical_link": Optional<String>,
"author_name": Optional<String>,
"author_webpage": Optional<String>,
"last_modified": Optional<Date>, (ISO 8601)
"priority": Optional<float>
}

Slugs

blog-tools 中,所有 slugs 都是 /{date}/{sub-slug}。

请确保 JSON 中的 "slug" 字段 为最终的子 slugs

本包的组织方式

有三个模块值得关注

这些指的是这些系统在运行时预期的 RAM 使用量。请选择最适合您博客数量的样式。请注意,这个 crate 不旨在处理数百万的

使用最多的 RAM,通过在整个时间内将整个博客存储在内存中,这样做最好的方式是使用类似于懒静态的

lazy_static! {
    pub static ref STATIC_BLOG_ENTRIES: HighBlog =
        get_high_blog(PathBuf::from(BLOG_ROOT), None, None, URL, &SitemapOptions::default());
    }

存储博客的大部分内容,但不是博客文章本身的渲染 HTML。这些将在请求时渲染

lazy_static! {
    pub static ref STATIC_BLOG_ENTRIES: MediumBlog =
        get_medium_blog(PathBuf::from(BLOG_ROOT), None, None, URL, &SitemapOptions::default());
    }

let this_blog = match all_blogs.hash.get(&complete_slug) {
    Some(x) => x,
    None => return None,
};

context.insert(
    "blog",
    &this_blog
        .render(PathBuf::from_str(BLOG_ROOT).unwrap())
        .unwrap(),
);

最后, 完全不存储任何内容,旨在在运行时获取一切。

let preview = preview_blogs(PathBuf::from_str(BLOG_ROOT).unwrap(), 2, None);
let tags = get_blog_tag_list(PathBuf::from_str(BLOG_ROOT).unwrap());
let blog_post = render_blog_post(PathBuf::from_str(BLOG_ROOT).unwrap(), date, slug, None).unwrap();
let sitemap = create_sitemap(BLOG_ROOT, URL, &SitemapOptions::default());

此方法可能会在运行时性能方面产生严重影响,但如果有必要将博客放入内存中,则可能有必要

示例

此 crate 包含三个示例 - 使用 rocket 和 tera 模板创建的相同博客网站 - 使用每个模块的一个。您可以通过以下方式运行它们

cargo run --example high
cargo run --example medium
cargo run --example low

然后您可以从 localhost:8080 查看它们

待办事项

  • 更富有教育意义的错误信息和更好的错误处理
  • 此 crate 非常需要更多的测试和反馈!

依赖关系

~3–12MB
~130K SLoC