0

我已经构建了一个使用静态站点生成器nanoc编写大学课程的工具。Nanoc 是一个不错的基于 Ruby 的包,它作为 gem 分发。

我安装了 gem,并使用“nanoc new”命令创建了基本的目录结构。在那个目录结构中,我编写了一些自定义的 ruby​​ 代码,以及大量的 markdown 文件来定义我的第一门课程。这是已建成的课程

我上面在 git 中显示的代码对应于该工作的结果,即 nanoc + 我的自定义。还必须运行一个捆绑程序文件才能引入我的其他宝石。

我们将单个课程称为“cosi235a.course”,并将我的工具称为“nanoc-course”。我称 cosi235a.course 的作者为“作者”,我称“nanoc-course”的维护者为“我”。

我正在寻求帮助的是一个很好的设计,可以将 nanoc-course 与 cosi235a.course 分离。换句话说,我想将我定制的基于 nanoc 的工具与一门课程的内容分开。

这样,如果我想为第二门课程设计课程,我可以创建该课程,并且仍然可以对公共代码进行更新。不仅如此,另一位作者可以在他们的网站上创建一个新课程,并为自己使用 nanoc-course,并从我对该工具所做的更新中受益。

我一直在思考这个设计问题,但我没有找到我喜欢的想法。到目前为止,这些想法是半生不熟的:

  1. 使 Git 上的 nanoc-courses 包含除所有 Markdown、HTML 和其他内容文件之外的所有内容。根据 nanoc,它们恰好都存在于名为 ./content 的子目录中。Git 上的目录是空的。添加一些 Rake 任务以创建符号链接到包含 cosi235a.course 文件的单独目录。通过这种方式,作者可以处理他们的内容文件,并随时对 nanoc-course 的任何更新进行 git pull。这是一个干净的分离,但很笨重。

  2. 使 nanoc 课程成为与 nanoc 一起使用的宝石。换句话说,作者安装 nanoc,执行 nanoc-course 的 gem install(或 bundler install),并在 nanoc 的库中添加一两行以合并逻辑。这种分离不太完整,需要作者(不一定是 Ruby 程序员)修改代码。对于 nanoc 的变化,它也很脆弱。

你有什么想法?

4

1 回答 1

2

有同样的问题。选项 1 似乎是最明显的,但它需要作者理解 git 的复杂性——我可以看出这很容易出错。

我倾向于对 2 进行修改,其中您有一个基于 nanoc 的自定义 gem,但将其锁定到 gemspec 中的特定版本。“课程”只需要包含一些基本元素,例如

/内容

/输出

Gemfile <== 包含您的“纳米课程”宝石

Gemfile.lock

为课程作者提供一个模板项目,您只需教作者如何使用 bundler。

于 2013-08-10T02:51:12.807 回答