将Mallibone.com从MiniBlog迁移到Jekyll

 显示框的照片

经过8年的使用 miniblog. 由...制作 疯狂克里斯滕森 ,我决定是时候搬到了基于Markdown /静态生成的网站时 jekyll 。由于从一个博客平台迁移到另一个博客平台时,似乎似乎是强制性的,我将遵循呼叫。但是,让我们开始为什么?迁移博客平台并不小壮举,我自2013年以来一直在使用我当前的系统。好吧,这不是因为我希望保持最新和最伟大的。 ðÿ〜‰但有一些事情最终弥补了我当前XML和图像文件的决定,并将它们移动到静态生成的网站的标记土地。

miniblog. 真的很棒。我能够在最小的蔚蓝的计划上运行它。它不需要数据库,甚至可以使用在线编辑器,允许您在浏览器中撰写博客文章。但我很少使用在线编辑。我主要会用 开放现场作家 (OLW),它提供了类似于Word的原因 - 您的识别(Wysiwyg)的体验。虽然OLW是一个很好的工具,但它(在撰写本文时)仅适用于Windows的解决方案,我正在在Mac上写下这些行。所以我最终在Markdown中编写了我的博客文章,然后使用OLW导出HTML并将其导出/上载。不太好,但可行。最终让我跳过这艘船是当前实现仍然在.NET 4.x上运行的事实是。现在有一个miniblog for .net核心。但是我已经在静态生成的网站上感兴趣 杰拉德 , 史蒂文 我开始了自己的播客 - null指针 #besuretocheckitout。 ðÿ™,我们选择 GitHub. 页面。对于一个人来说,他们是免费的(始终是一个伟大的价格开始),提供构建工具链,这只是整体适合我们的需求。 GitHub页面使用 jekyll 在引擎盖下,基于Ruby并且已经存在了很长一段时间。有各种各样的主题可供选择,有些主题甚至可以自由使用。在熟悉Jekyll系统以便设置我们的播客网站后,我销售并开始计划将我的博客迁移到它上面。

迁移

在开始我的旅程之前,我小心翼翼地(不是真的)制作(再次......)“战斗机”:

  • 获得博客帖子

  • 将XML迁移到Markdown

  • 迁移图像

  • 找一个主题

  • 确保旧链接仍然有效

  • 与jekyll *更多的东西

*)虽然不是原来的计划,但这最终在我最后取得了很多时间。但它很有趣,我甚至学到了一些CSSðÿ〜ƒ

抓住我的博客帖子

我有两件事在这里。对于一个,MiniBlog实际上不需要数据库。它存储XML中的所有博客。我为我提供的第二件事是我的偏执鸟 - 这意味着我已经启用了自动化 备份 我的网站。所以我所要做的就是抓住我博客的最新邮政备份,我已准备好开始将其迁移到崩溃。

从XML到Markdown

通常,当从一个博客平台迁移到另一个博客平台时,我建议使用 你最喜欢的搜索引擎。使用流行平台时会有很好的机会。有人已经下降了同一个道路,并写了关于他的经历。因此,您可能会发现博客文章甚至是一个完整的迁移脚本,您可以尝试博客的副本。但MiniBlog似乎留了一个秘密宝石。

由于MiniBlog使用XML文件来存储博客帖子,我觉得为什么不使用F# 类型提供者 我已经用于类似的任务。使用TypeProvider和引用XML文件:

#r  "nuget: FSharp.Data"

open FSharp.Data

// ...

type BlogPost = XmlProvider<"path-to-miniblog-post.xml">

我能够提取如下所示博客文章的元信息:

let createHeader (blog:BlogPost.Post) =
    [ "---";
        "layout: single";
        sprintf "title: \"%s\"" blog.Title;
        sprintf "title: %s" (blog.Title.Replace(":", "&#58;"));
        sprintf "date: %s" (blog.PubDate.ToString("yyyy-MM-dd"));
        sprintf "tags: [%s]" (formatTags blog.Categories);
        sprintf "excerpt: '%s'" blog.Excerpt;
        sprintf "slug: \"%s\"" blog.Slug;
        // sprintf "excerpt: \"%s\"" blog.Excerpt;
        "---" ]
    |> String.concat "\n"

let parseBlog outputDirectory blog =
    let header = createHeader blog

    // convert content
    
    // adjust image paths
    
    let post = header + "\n" + content

		// filename
    let postname = $"""{blog.PubDate.ToString("yyyy-MM-dd")}-{blog.Slug.Replace("/", "-").Replace(":", "")}.md"""

    // ensure output directory is created
    Directory.CreateDirectory(outputDirectory) |> ignore

		// Write file
    let file = Path.Combine(outputDirectory, postname)
    File.WriteAllText(file, post)
    file

接下来是在另一个标签中作为HTML存储的内容。很快就像将自己的HTML写作到Markdown Parser一样,我只是很快被放弃了发现这个想法 Reversemarkdown Nuget包装。有了这个,我可以将我的html转换为一行中的标记:

let rawContent = (Converter()).Convert(blog.Content)

我已经对此感到非常满意。接下来是图像。

图片

图像已经通过OLW进行了优化,因此我所要做的就是更改URL并将它们复制到正确的目录中。所以我将我的f#脚本扩展了几行代码,用于复制图像:

let copyImage destinationDirectory source =
    Directory.CreateDirectory(path=destinationDirectory) |> ignore
    let filename = FileInfo(source).Name.Replace("NoLongerNeededFilenamePart", "")
    let destination = Path.Combine(destinationDirectory, filename)
    File.Copy(source, destination, overwrite=true)
    destination

然后在生成Markdown时使用字符串替换:

let content = 
    rawContent.Replace("//cnhdkj.com/posts/files/", "//cnhdkj.com/assets/images/")

找到合适的主题

jekyll 出来的是最小的主题。我必须说,我真的很喜欢它。但我也知道已经在这项设计上进行了体育的很少的网站,所以我想,为什么不迅速投资15分钟,看看我是否找到了另一个主题 这里 或者 这里 。 4小时后,我发现了我的新设计。光荣和 最小的错误 将是我为新博客平台选择的主题。

To be honest, I checked this out before I started migrating. The thing is that once you have a blog, you generally want to stick to whatever URL format your current platform has. If you change the URL and don't want to confuse the Googles, Bings and DuckDuckGos of this world, you would have to hardcode in redirects. And that is about as much fun as it sounds like. Luckily you can configure the path to your posts in the config.yml file:

#
# So much config stuff
#

defaults:
  # _posts
  - scope:
      path: ""
      type: posts
    values:
      # stuff...
      permalink: '/post/:slug'

# More config stuff

摆弄

现在开始摆弄部分。对我来说,这是调整某些领域的造型,AKA将主题调整为我的喜好。我可能会通过选择不同的主题或只是使用默认值来缓解这一点。但是,再一次,我真的很喜欢我的网站现在如何看待。

另一个大小提琴是图像。虽然大多数人会很好地呈现,但一些手机屏幕截图只会爆炸。特别是我进入一些博客的录音序列。但是通过一些CSS魔法,我终于到了一个对我满足的解决方案。

一切一切都在本地运行,我将其推到github上。使用个人存储库 //your-user-name.github.io。我使用CloudFlare,所以我不得不换掉它指向的服务器。然后是一只漫长的呼吸,推动一个按钮,上升是我在GitHub页面上运行的博客。

CloudFlare带有很大的特权,例如免费的SSL证书和免费缓存,是能够注册重定向。这就是如此原来,RSS饲料是我无法轻易重定向的一件事(读取标志无法弄清楚如何ðÿ〜‡)。所以我最终注册了一个 页面规则 在CloudFlare制作一个永久的重定向,如果所有RSS读者都很好吃,我希望在几个月内再次删除 - 一个人可以梦想,对吧? ðÿ〜†

结论

那真的值得吗?简而言之,是的,对我来说,这是值得的经验。对于一个,它很有趣的学习和阅读这些静态网站,我真的认为他们将来有很多潜力。虽然我的博客主要是静态,但我可以使用此设置,然后调用Azure函数以触发一些后端逻辑。所以我认为这种方法不仅限于博客。

此外,跑步的成本现在是0,这是一个很好的待遇。幸福地幸福?好吧,在我感到高兴之前,我还必须弄清楚一些东西。一个是图像调整大小,由猫头鹰自动完成。另一个区域是可以完成的评论,但我刚刚离开了。如果您有评论随时可以在Twitter上与现在ðÿ™,

所以这是我从Miniblog到Jekyll的旅程。我希望更多的博客帖子将遵循这个。您可以找到我使用的完整脚本 GitHub. 。请注意,由于硬编码路径等,您需要对其进行一些更改。

Hth.

拍摄者 ketut subiyanto. pexels.

Updated: