贡献

jekyll-import 是完全开源的,这意味着我们需要你的帮助来让它变得更好!

遇到问题?

如果你在某个导入器中发现了问题,很抱歉出现这种情况!为了更好地帮助你,并确保问题不会再次发生,我们希望你能做以下几件事:

  1. 收集你的系统信息:操作系统及版本、Ruby 版本、Jekyll 版本、jekyll-import 版本。
  2. 说明你正在使用哪个导入器(importer)。
  3. 收集相关数据,这可能是数据库或输入文件的数据,有助于我们定位问题。
  4. 确保在命令行运行 jekyll-import 时启用了 --trace 选项。
  5. 提交一个新 issue,并说明以上四点内容,以及你期望的运行结果。

你很快就会收到帮助。同时,如果只是一般问题,也可以查看 我们的帮助社区


创建新的导入器

如果你有一个新的系统想要支持导入,那太好了!在 jekyll-import 中添加一个新的 importer 非常简单。下面以创建 Columbus 导入器为例。

首先,创建导入器文件。在本例中是:lib/jekyll-import/importers/columbus.rb。 在该文件中添加如下模板:

module JekyllImport
module Importers
class Columbus < Importer
def self.require_deps
JekyllImport.require_with_fallback(%w(
safe_yaml
mysql2
))
end

```
  def self.specify_options(c)
    c.option "dbname",   "--dbname DB",   "数据库名称(默认:'')"
    c.option "user",     "--user USER",   "数据库用户名(默认:'')"
    c.option "password", "--password PW", "数据库密码(默认:'')"
    c.option "host",     "--host HOST",   "数据库主机名(默认:'localhost')"
  end

  def self.process(opts)
    options = {
      :dbname   => opts.fetch("dbname", ""),
      :user     => opts.fetch("user", ""),
      :password => opts.fetch("password", ""),
      :host     => opts.fetch("host", "")
    }

    # 执行实际导入逻辑
  end
end
```

end
end

我们快速解释一下。


self.require_deps

这个方法会在运行导入器之前执行,用于确保用户系统已安装所有必要的 gem 依赖。


self.specify_options

该方法接收参数 c,它是该导入器对应的 Mercenary::Command 实例。你可以通过它定义命令行参数。jekyll-import 已经处理了其余逻辑——你只需要声明参数即可。


self.process

核心逻辑所在。这个方法负责从 Columbus 数据源读取内容,并生成 Jekyll 站点文件。


可选:self.validate

这是一个可选方法,用于对参数进行校验。例如:

def self.validate(opts)
abort "请指定用户名!" if opts["username"].nil?
abort "用户名必须为数字。" unless opts["username"].match(%r!\A\d+\z!)
end

当你的 importer 完成后(可以用 script/console 测试),就可以开始添加文档了。新增文件:

./docs/_importers/columbus.md

可以参考其他 importer 的写法,只需提供基础用法说明即可。

完成后,将代码提交到你的 jekyll-import fork 分支,并提交 pull request

谢谢!