说实话,写这篇文章的起因纯粹是因为我把重要的研究笔记搞丢了,那种心脏骤停的感觉我至今记忆犹新。那天晚上,我试图把散落在飞书、Notion 和本地 Typora 里的三个文档拼凑在一起,结果发现 Notion 的多端同步彻底“摆烂”了,数据像是被黑洞吸走了一样消失得无影无踪。
这一折腾就是大半夜,好在最后不仅找回了数据,还顺手把困扰我已久的 Typora + GitHub Pages 博客搭建流程理顺了。如果你也正处在类似的痛苦中——要么数据同步报错,要么博客部署 404 满天飞,请坐稳了,这篇全是血泪换来的干货。
第一部分:Notion 多端同步失败的“破案”现场
1.1 现象:当“实时同步”变成“实时不同步”
那天我遇到的症状非常典型:在电脑上编辑了标题,手机端打开后依然是半小时前的内容。更可怕的是,当我在本地通过某些第三方工具(比如 Notion增强插件或本地数据库)写入数据时,Notion 的官方 App 直接卡死,甚至显示 Sync Error。
一开始我以为是网络问题,切换了机场,甚至重启了路由,结果毫无建树。直到我打开 Mac 的“控制台”查看日志,发现了一个关键报错:Cache Corruption detected。
1.2 核心原因分析
经过排查,Notion 同步失败通常由以下三个“罪魁祸首”引起:
- 本地缓存冲突:Notion 会在本地存储大量缓存数据以加速加载。当网络不稳定或强制退出时,缓存文件可能损坏,导致客户端无法正确解析云端数据,从而陷入死循环。
- 浏览器插件干扰:某些 Notion 增强插件(如 Notion++ 或旧版的 Super)会与官方新的同步协议冲突,尤其是在执行批量操作时。
- API 限流(Rate Limiting):如果你使用自动化脚本频繁读写 Notion,触发了官方的 API 限制,也会表现为同步中断。
1.3 修复方案:从“重启”到“根治”
步骤一:清除本地缓存(最有效)
对于 Mac 用户,这不是简单的删除 App,而是清理 Library 下的文件夹。请按照以下路径操作:
# 打开终端,执行以下命令备份并移动缓存文件夹(不要直接删除,先备份)
mv ~/Library/Application\ Support/Notion ~/Library/Application\ Support/Notion_Backup_$(date +%Y%m%d)
mv ~/Library/Caches/Notion ~/Library/Caches/Notion_Backup_$(date +%Y%m%d)
mv ~/Library/Group\ Containers/UBF8T346G9.ms ~/Library/Group\ Containers/UBF8T346G9.ms_Backup_$(date +%Y%m%d)
注意:执行后,Notion 会像第一次安装一样重新加载。这通常能解决 80% 的同步卡顿问题。如果之后想恢复旧数据,可以逐个文件夹对比查找。
步骤二:排查插件冲突
如果你安装了任何 Notion 插件,请尝试在无痕模式下登录 Notion 网页版,或者暂时禁用插件。我发现,当我禁用了某个声称能“加速加载图片”的插件后,同步延迟从 5 秒降到了 0.5 秒。
步骤三:检查 API 限制
如果你是通过 make 或 n8n 等工具同步,确保你的请求间隔大于 1 秒。Notion 的免费 API 限流非常严格,建议使用指数退避算法(Exponential Backoff)来处理请求失败的情况。
第二部分:Typora + GitHub Pages 免费博客搭建全攻略
解决了数据同步的惊魂时刻后,我决定把笔记永久保存下来,不再依赖任何商业 SaaS 平台。于是,我选择了经典的 Typora + GitHub Pages 方案。这条路看似简单,但坑多得足以让你怀疑人生。
2.1 为什么选择这套组合?
- Typora:真正的所见即所得编辑器,Markdown 体验的天花板。
- GitHub Pages:永久免费,支持自定义域名,HTTPS 安全连接。
- 静态站点生成器(如 Hexo/Hugo/Jekyll):虽然灵活,但配置门槛高。对于大多数个人博主,直接用 Typora 写 HTML 或配合简单的静态主题是最优解。
2.2 前置准备:你需要什么?
- 一个 GitHub 账号。
- Typora 编辑器(购买授权支持开发者,但免费使用不影响功能,只是会有弹窗提示)。
- 一个静态博客主题(推荐 Hugo 或 Jekyll 的轻量级主题,如
PaperMod或Minimal Mistakes)。
2.3 详细搭建步骤(以 Hugo + PaperMod 为例)
第一步:初始化 Git 仓库
在本地创建一个文件夹,命名为 blog,然后初始化 Git:
mkdir my-blog && cd my-blog
git init
第二步:配置 Hugo 主题
Hugo 是静态站点生成器中速度最快的之一。你可以直接通过 Git 子模块添加主题:
git submodule add https://github.com/adityatelange/hugo-PaperMod.git themes/PaperMod
然后在 config.toml 中配置:
baseURL = 'https://yourusername.github.io/'
languageCode = 'zh-cn'
title = '我的思考笔记'
theme = 'PaperMod'
[params]
defaultTheme = "auto"
ShowReadingTime = true
ShowToc = true
第三步:编写第一篇博文
在 content/posts/ 目录下创建一个新文件,比如 hello-world.md:
---
title: "Hello World"
date: 2023-10-27
draft: false
---
这是我在 Typora 中编写的第一篇文章,即将部署到 GitHub Pages。
```go
package main
import "fmt"
func main() {
fmt.Println("Hello, GitHub Pages!")
}
#### 第四步:本地预览
在终端运行:
```bash
hugo server -D
打开浏览器访问 http://localhost:1313,你应该能看到精美的博客页面了。
2.4 部署到 GitHub Pages
这是最关键的一步,也是最容易出错的地方。
方法一:手动部署(适合新手)
- 在 GitHub 上新建一个仓库,命名为
yourusername.github.io(注意:必须是这个格式,且用户名一致)。 - 在本地构建静态文件:
hugo - 将
public文件夹的内容推送到远程仓库:git add . git commit -m "Initial commit" git remote add origin https://github.com/yourusername/yourusername.github.io.git git push -u origin main - 稍等几分钟,访问
https://yourusername.github.io即可看到博客。
方法二:GitHub Actions 自动部署(推荐)
为了避免每次手动构建和推送,我们可以配置 GitHub Actions 实现“推送源文件自动构建部署”。
在你的仓库根目录创建 .github/workflows/deploy.yml:
name: Deploy Hugo Site to Pages
on:
push:
branches: [ "main" ]
workflow_dispatch:
permissions:
contents: read
pages: write
id-token: write
concurrency:
group: "pages"
cancel-in-progress: false
jobs:
build:
runs-on: ubuntu-latest
env:
HUGO_VERSION: '0.121.1'
steps:
- name: Install Hugo CLI
run: |
wget -O ${{ runner.temp }}/hugo.deb https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_linux-amd64.deb \
&& sudo dpkg -i ${{ runner.temp }}/hugo.deb
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive
fetch-depth: 0
- name: Setup Pages
id: pages
uses: actions/configure-pages@v4
- name: Build with Hugo
env:
HUGO_ENVIRONMENT: production
HUGO_ENV: production
run: hugo --baseURL "${{ steps.pages.outputs.base_url }}" --minify
- name: Upload artifact
uses: actions/upload-pages-artifact@v3
with:
path: ./public
deploy:
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
needs: build
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
这样,你只需要在 Typora 里写好文章,git push 到 GitHub,GitHub 就会自动帮你构建并部署。
第三部分:避坑指南——那些我踩过的坑
3.1 图片引用问题(本地 vs 在线)
Typora 默认会将图片保存到本地(或剪贴板)。当你把文章推送到 GitHub 时,如果图片路径是 assets/images/photo.png,而 GitHub Pages 无法访问本地路径,图片就会显示为红叉。
解决方案:
使用图床(如 SM.MS、Imgur 或 GitHub 仓库内的 static/images 文件夹)。在 Typora 中,设置 Preferences > Image > Upload Service,选择支持自定义图床的服务,或者直接将图片上传到 GitHub 仓库的 static 目录,这样链接就是 https://yourusername.github.io/static/images/photo.png。
3.2 自定义域名配置
如果你想用 www.example.com 访问博客:
- 在 GitHub 仓库中创建
CNAME文件,内容为你的域名。 - 在域名提供商(如阿里云、Cloudflare)处添加 DNS 解析记录:
- A 记录:指向
185.199.108.153等 GitHub Pages 的 IP(或 CNAME 到yourusername.github.io)。 - 注意:GitHub Pages 不再支持直接 CNAME 根域名,所以必须使用 A 记录或子域名。
- A 记录:指向
3.3 SEO 与 404 页面
很多人忽略 404 页面。建议创建一个 404.html 放在 layouts/ 目录下,跳转到首页,提升用户体验。同时,在 config.toml 中配置 sitemap.xml,方便搜索引擎抓取。
第四部分:给小朋友也能听懂的总结
好了,说了这么多技术细节,我们来换个轻松的视角。想象一下,你的知识就像你收集的乐高积木。
- 飞书和 Notion 像是两个不同的玩具箱。有时候,你把积木从箱子 A 拿到箱子 B,结果发现积木块不见了,或者拿错颜色了。这就是同步失败。解决办法就是清空箱子,重新整理,确保每一块积木都有它自己的位置。
- Typora 是你的画板,你可以随意涂鸦,写得干干净净。
- GitHub Pages 像是你的专属展览馆,免费而且永远为你开放。你把画板上的画(文章)装进框里,运到展览馆挂起来,全世界的人都能看到。
- GitHub Actions 就是帮你在画好画之后,自动帮你装框、运货、挂画的小机器人,你只需要负责画画就好。
最后的建议
- 定期备份:无论用哪种工具,本地备份永远是底线。
- 保持简洁:技术选型不要过度复杂,适合你的才是最好的。
- 享受过程:搭建博客本身就是一种思考和整理知识的过程。
希望这篇记录能帮到你。如果你在实际操作中遇到任何奇怪的报错,欢迎在评论区留言,我们一起“破案”。毕竟,解决问题本身就是学习中最有趣的部分。
