贡献
jekyll-import 是完全开源的,这意味着我们需要你的帮助来让它变得更好!
遇到问题?
如果你在某个导入器中发现了问题,很抱歉出现这种情况!为了更好地帮助你,并确保问题不会再次发生,我们希望你能做以下几件事:
- 收集你的系统信息:操作系统及版本、Ruby 版本、Jekyll 版本、jekyll-import 版本。
- 说明你正在使用哪个导入器(importer)。
- 收集相关数据,这可能是数据库或输入文件的数据,有助于我们定位问题。
- 确保在命令行运行
jekyll-import时启用了--trace选项。 - 提交一个新 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。
谢谢!