# Discourse 作为 Jekyll 网站的 CMS

**URL:** https://meta.discourse.org/t/discourse-as-a-cms-for-a-jekyll-site/205919
**Category:** Development
**Created:** [2021 年10 月 13 日 07:56 UTC](https://meta.discourse.org/t/discourse-as-a-cms-for-a-jekyll-site/205919 "2021-10-13T07:56:04Z")
**Posts on this page:** 6
**Page:** 1

<div class="post-metadata">

### 作者： ![pacharanero](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pacharanero/32/500583_2.png) [@pacharanero](https://meta.discourse.org/u/pacharanero)
#### 发布日期： [2021 年10 月 13 日 07:56 UTC](https://meta.discourse.org/t/discourse-as-a-cms-for-a-jekyll-site/205919/1 "2021-10-13T07:56:05Z")

</div>

我是 Discourse 和 Jekyll 的重度用户，最近我一直在尝试将 Discourse 实例用作 Jekyll 静态站点的内容管理系统。我刚刚开始探索这个方向，此时发帖 partly 是想看看是否有人已经做过类似的事情。或者，如果您有更好的方案，也欢迎说服我不要在上面浪费时间：grin:

## 我设想的实现方式

- 在 Discourse 实例中编辑 Markdown 内容（为非技术用户提供友好的编辑界面），并且可以轻松重新编辑、更新等。格式化工具栏和其他便利功能让非技术用户更加满意。

- Jekyll 站点中包含一个 YAML 文件，其中有一个 **文章 URL** 数组（或者如果我们确定 Discourse 的 baseUrl 始终相同，也可以使用文章 ID），用于轮询获取内容。

- 一个简单的 Jekyll 插件会运行钩子来轮询每个 URL（每次 Jekyll 服务器重启时？），并 GET 数据。（对于许多“公开”的 Discourse 实例，无需身份验证。在某些情况下，可能需要提供 API 密钥）

- 通过添加 `.json` 后缀从 URL 下载 JSON 内容，该 JSON 对象的 `raw` 键包含以双引号包裹的 Markdown 字符串。

- 需要为 Markdown 添加 Jekyll YAML 前置元数据，并清理诸如包裹的双引号以及将 `\n` 换行符替换等操作。

- Jekyll 将这些完整页面构建为 HTML，或者您可以使用 `{{include file | markdownify }}` 将它们嵌入到其他页面中。

## 为什么要这样做？

- 让非技术编辑或维护人员更新静态站点变得容易得多。

- 如果您已经拥有 Discourse 并希望创建一个静态网站（例如用于企业），这非常理想。

- 静态站点成本低、可靠且安全。

- **为什么不使用页面发布功能？** 当我尝试过之后，发现这些页面需要做大量工作才能看起来美观。Jekyll 提供了更多控制权，并且当然允许混合使用 Discourse 管理和非 Discourse 管理的内容源。

社区有什么看法？这值得继续探索吗？

---

<div class="post-metadata">

### 作者： ![RGJ](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/rgj/32/523185_2.png) [@RGJ](https://meta.discourse.org/u/RGJ)
#### 发布日期： [2021 年10 月 13 日 10:07 UTC](https://meta.discourse.org/t/discourse-as-a-cms-for-a-jekyll-site/205919/2 "2021-10-13T10:07:43Z")

</div>

这绝对值得尝试。但我有偏见：几年前我曾作为一个爱好项目做过类似的事情。

目标不仅是能够从 Discourse 的精选内容创建 Jekyll 站点，还要能够将其发布为（epub 或 pdf）电子书（这也是我对“为什么不使用页面发布”这一问题的回答）。

我采用了非常相似的方法，使用一个 yml 文件和一个包含帖子 URL 的数组。

图片曾是一个问题，但我手头还有相关的 Python 代码，它可以获取所有 `upload://` 链接，解码它们，下载并调整图片大小，然后将链接更改为本地图片 URL。

我从未完成这个项目，但我当然有兴趣重新拾起它，并贡献我已经完成的那些（少量）工作。

---

<div class="post-metadata">

### 作者： ![pacharanero](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pacharanero/32/500583_2.png) [@pacharanero](https://meta.discourse.org/u/pacharanero)
#### 发布日期： [2021 年10 月 13 日 10:52 UTC](https://meta.discourse.org/t/discourse-as-a-cms-for-a-jekyll-site/205919/3 "2021-10-13T10:52:59Z")

</div>

> [@RGJ](#):
>
> 这绝对值得推进

谢谢！我会看看能否在接下来的几个月里抽出时间来做这件事。

> [@RGJ](#):
>
> 我从未完成这个项目，但我确实有兴趣重新接手

请问您是否有任何代码托管在 GitHub 仓库中？

---

<div class="post-metadata">

### 作者： ![RGJ](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/rgj/32/523185_2.png) [@RGJ](https://meta.discourse.org/u/RGJ)
#### 发布日期： [2021 年10 月 13 日 11:28 UTC](https://meta.discourse.org/t/discourse-as-a-cms-for-a-jekyll-site/205919/4 "2021-10-13T11:28:57Z")

</div>

我仔细查看了一下，似乎只有图片相关的代码值得保留，请不要介意代码风格（或缺乏风格）。  
我已创建一个 gist：[retrieve images from a raw discourse post · GitHub](https://gist.github.com/communiteq/c6241df1ef57292e479ff13e873e2ba3)

---

<div class="post-metadata">

### 作者： ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### 发布日期： [2021 年10 月 13 日 13:08 UTC](https://meta.discourse.org/t/discourse-as-a-cms-for-a-jekyll-site/205919/5 "2021-10-13T13:08:53Z")

</div>

听起来很有趣。我有一位客户也做了类似的事情，他们使用标签让用户生成简历（尽管所有内容都是在 Discourse 中渲染的）。

> [@pacharanero](#):
>
> JSON 内容是通过在 URL 后添加 `.json` 下载的，该 JSON 对象的 `raw` 键包含以双引号包裹的 Markdown 字符串。

另见 [https://meta.discourse.org/posts/1001736/raw](https://meta.discourse.org/posts/1001736/raw)

---

<div class="post-metadata">

### 作者： ![pacharanero](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pacharanero/32/500583_2.png) [@pacharanero](https://meta.discourse.org/u/pacharanero)
#### 发布日期： [2021 年10 月 13 日 13:53 UTC](https://meta.discourse.org/t/discourse-as-a-cms-for-a-jekyll-site/205919/6 "2021-10-13T13:53:25Z")

</div>

> [@pfaffman](#):
>
> 另见 [https://meta.discourse.org/posts/1001736/raw](https://meta.discourse.org/posts/1001736/raw)

更好，谢谢！
