我把 Pi.bitcron.com 全部看了一遍,整理出了这些有用的信息

整理的原因是,我感觉这会被我用到,比如 API 调用,等我学完 html 和 css 的时候,说不定就会自己折腾了;还有 category 及 keywords 感觉就是我想要的 分类和标签页,虽然现在还看不懂,但是整理好了,方便以后直接用!

另外,假如我现在不整理,等我变厉害了之后,这些就对我没什么价值了。感觉浪费了这个阶段能更锻炼我的机会。最后,我想浏览一遍,看看 Bitcron 的内测用户都是些什么样的人,顺便琢磨一下 Hepo 的回复风格,哈哈~

Bitcron 内测须知

问题需要重现,出错信息写清楚

Bitcron 模板构建的 API 调用,以及 Bitcron 各个接口的调用

  • Bitcron 的很多接口都进行了分类、归档,也就是 namespace
  • Bitcron Document
  • 问题来源:https://pi.bitcron.com/post/16-09/2016-09-11-00-19-18https://pi.bitcron.com/post/16-12/2016-12-30-15-58-56
  • Bitcron 不再提供 clone 的支持,需要获得作者的源代码才行
  • Clone 是清空设置(Render/显示)里的模板的 key,再全内容进行复制从而获得实体;自定义模板,务必先在设置里将模板设置为空,不然优先级不够
  • 先到文件管理器中,将整个 template 目录都删除之后,再进行模板克隆。如果克隆了太多主题在一个站点里,可能很多模板文件会互相冲突;假设不是要自己修改模板,直接 Apply 即可
  • 一个直接路径(比如 hello.md )的Markdown文件的呈现,其页面不可自定义;但是可以换一种思路,在 template 目录下创建一个 x.jade,那么访问 /x/hello.md就能处理 hello.md 这个文档的呈现了
  • 之前没有做 comments 的对接。现在初步已经处理掉,都会转为 csv 文件。但是已经产生的内容不会变更,所以比较尴尬的是,先移除原来的 comments 文件,然后同步完成后,再移入回原来的路径,然后 Bitcron 就会自动转化为 comments 的 csv 文件了
  • 页面结构化数据的缓存为更新,需要自己手工update下文档就会重新编译

Casper 主题如何修改主图

  • 文章题图是默认提取文章内的图片,也可以自己设置 cover 属性
  • 首页图片可以自己修改模板的固定题图,在_cache/unsplash/large这个目录下取图片,但不超过 20 张

加密访问网站或日志

  • 全网站加密,直接在网站后台设置访问密码,具体可参考 网站高阶设置项
  • 单篇文章加密,需要用自定义模板,控制所有内容的输出,从侧面增加这种功能
  • 文章加密的代码,可参考这篇文章:创建密码保护的日志

MarkEditor 隐藏文件夹

  • 文件夹右键添加隐藏标记,重启后生效
  • 在隐藏文件夹的上级文件夹,右键“取消所有隐藏标记”,重启后生效

Dropbox 同步 Bitcron 的频率

  • 接近实时
  • 可能遇到“节点跳跃”的问题:如果实际访问的节点在香港,会多出 Bitcron 节点之间同步的十几秒时间
  • 如果网站有多个节点,节点之间就会互为备份(任何一个节点的云端接入,只要成功就会同步到其他节点上),过一段时间后,在 FileManager 删除的文件又会重新回来
  • 同步回 Dropbox 是 Bitcron 主动的,从 Dropbox 同步回来,则是 Dropbox 主动的

No doc matched for comment

  • 文章改名、改路径,csv 文件是不会自动变更的
  • 修改新的路径后,csv 文件会自动匹配为文章的评论 list
  • 如果丢失了新评论,有可能是跨界点数据同步、reset 的延时问题(所以如果需要对文件直接操作,建议在主节点上进行)
  • 如果是 Dropbox 同步,在本地直接修改的。那丢失评论就更正常了,因为从 Dropbox 得到的数据本身就是这样,有可能是 Dropbox 本身的延时没有同步至最新,也有可能原来 Bitcron 上的文件 push 到 Dropbox 时的延时(包括 push 失败的可能)

Dopbox 和 IFTTT

  • 问题来源:https://pi.bitcron.com/post/16-11/2016-11-23-08-34-24
  • Bitcron 同步 Dropbox 时,文件夹名称须设置为网站域名,就导致无法正常使用 IFTTT 向 Bitcron 写入文件,因为 IFTTT 不支持 . 这个符号
  • 实现方法:可以使用两个连续的 - 代替 . , 比如 domain--com

Dropbox 迁移

  • 在 Dropbox 内先删除原来的网站目录,然后重新新建网站文件夹
  • 如果不是先有网站,再有 Dropbox 上的内容,是不会进行同步的

设置 HomePage 并且还能访问普通首页

  • 问题来源:https://pi.bitcron.com/post/16-09/2016-09-17-09-32-18
  • 实现效果:有 homepage 时访问域名显示 index.md 的内容,访问 /index.html 则显示普通的首页
  • 实现方法:index.md 里的 metadata 设定为 homepage: true,另外站点目录下放置 index.html

去掉导航栏中的订阅

  • 只要使用了有这个订阅类型的模板,都会默认生成订阅导航
  • 自定义导航即可,它会替换掉系统自动生成的

让博客首页显示全文

  • 需要修改模板
  • index.jade 里,newest_post.content.opening or newest_post.content.limit(180) 修改为 newest_post.content 即可

301 重定向 和 404

  • 问题来源:https://pi.bitcron.com/post/16-10/2016-10-19-00-07-00
  • 实现效果:301 页面,自动跳转到 自己设置的另一个页面,例如回到博客主页
  • 实现方法:在 tempate 这个文件夹中新建一个 post.jade 的函数,然后里头写上:if request.host == ‘www.old.com'+redirect('http://blog.old.com'+response.redirect)
  • Bitcron 不支持 404.html,仅支持 404.jade
  • +xxx 是 jade 语法, {{ xxx }} 是Jinja语法
  • 复杂一些的是判断 request.host 再调用 response.redirect,详情见:https://api.bitcron.com/read/req_and_res
  • 无法添加的 Layout: Pic and Text, Markdown, cover. ,可能是因为 301/302 跳转产生的浏览器缓存导致的问题

上下文数据对象 context_doc

  • 实现效果:获取上一篇或下一篇的文章
  • 实现方法:API 目前已经支持 context_doc
  • date: 2017-01-01 是不准确的,只到天,最终都会被视为00:00,如果多个文章日期都为这个,则视为一致

post.category.title 以及 posts.category

  • 实现方法:前提是 post.category 文件夹存在
  • 补充:新的 feature 是指 +h.debug_template` 这类函数,本身被当做属性调用的时候,也能正常呈现
  • 为了 让 +x.xx+x.xx() 表面上不同性质的东西产生同样的效果,有些规则判断容易遗漏
  • Farbox 可以直接在 category.jade 用 category,而 Bitcron 没有直接的 category 可以调用了,它分散到了 posts & images 本身,也可以通过 d.get_data(type=‘folder’, .etc) 获得原始的 folder 文档,其本身也是有 metadata 属性可以调用的
  • Bitcron 的 category.metadata.xxx,是有效的。+h.seo 仅仅是一个属性的调用
  • 通过d.get_data获取categories是对的,但后面 for 的时候,不要调用 posts.categories
  • d.get_data的时候,指定 with_page=False, 就不会多个分页对象混淆了

补充提问:

像这样+h.seo(keywords,description)。比如我设置了有category.meta。就可以用+h.seo(category.metadate.keywords,category.metadate.description)来控制分类页的关键词和描述。当然现在自己写meta标签可以实现一样的效果

Hepo 的回复:

Hey,
这是一个很好的改进想法,感谢。
已支持,并补充至文档:
可接受参数keywords, description, 如果网站本身有配置 keywords & description, 即 site.configs.keywords & site.configs.description,如果参数未传入,会作为默认补充,但其优先级低于传入的参数。
:)

另一个提问:关于 category

get_data(sort='position')

  • position 如果没有声明,相当于 None,排序为正序时,排在前面

FileManager 增加对 .css 的支持

  • 一般编辑还是推荐 scss
  • 如果只是 .min.css 类似的,可以直接拖入到左侧的文件列表,应该也能上传
  • 如果 style.scss 里含有不正确的色值,会导致整个样式文件无法正常解析
  • 图片自适应大小,需要通过 css 控制,自定义模板

HTTPS 的 SSL 证书

  • HTTPS 本身的限制,只能到 xxx.dmain.com & domain.com 这两个层级
  • 层级多起来之后,比如 xxx.xxx.park.bitcron.com, HTTPS 的 SSL 证书会彻底无效化掉
  • Force SSL/service/ 开头的不会生效,因为这个是只有作者才能访问到的路径,自己手工输入个 HTTPS 就可以了
  • /service/ 路径前缀也是一个保留路径,如果全部跳转,系统内有些机制会出问题
  • "your connection is not private",自动生成的证书链不完整,需要合并中间证书
  • DNS A 记录缓存问题,增加自动重新申请 SSL 签发证书的逻辑后解决
  • 若网站有多节点,SSL 证书的颁发可能会有延时造成的冲突

HTTPS 下无法搜索

绑定 DNS 后如何修改 MX 记录

  • 网站设置(Dashboard)中,“高级” 里设定 DNS MX Records,每行一条记录
  • 不需要填优先级,但最好按照优先级本身从小到大填入记录

Hide Post Prefix

  • 实现效果:url 全部由“example.com/post/xxx”变成“example.com/xxx”
  • 实现方法:网站的设置中,Hide Post Prefix 选 Yes 即可

Feed+分页+SEO (看不懂)

@2017-05-07 18:32
Comments
Write a Comment
  • Dogmarvin reply

    需求是最好的驱动。我也正在学习中

  • 说到https,你是不是应该在你的网址前加上https://,并在darshbord上开启强制SSL呢?