2019.11.12更新
关于系统更新到MacOS 10.14之后ruby环境的调整,以及多说关闭之后评论系统的选择。
系统更新到10.14之后
gem install
工具会出错:
1
2
3
4
5
$ sudo gem install bundler
Password:
Fetching: bundler-2.0.2.gem (100%)
ERROR: While executing gem ... (Gem::FilePermissionError)
You don't have write permissions for the /usr/bin directory.
这是因为Apple在OS X El Capitan中全面启用了名为System Integrity Protection (SIP)的系统完整性保护技术。大部分系统文件禁止直接修改。
要退出SIP需要重启到recovery模式下进行(重启按住command+r),这里采取另一个办法:
/usr/bin
禁止写入后,一般都用/usr/local/bin
目录替代。gem install
可以使用 -n install_path
指定安装路径:
1
sudo gem install xxx -n /usr/local/bin
bundle install的时候还会出错:
1
2
3
4
5
6
7
8
9
10
11
$ bundle install --path vendor/bundle
Fetching gem metadata from https://rubygems.org/..........
Using rake 10.5.0
Fetching RedCloth 4.2.9
Installing RedCloth 4.2.9 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
...
mkmf.rb can't find header files for ruby at
/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/include/ruby.h
extconf failed, exit code 1
因为macos10.14之后xcode11内置了macos10.15的SDK,预装了ruby2.6,没有ruby2.3的目录
1
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/include/ruby-2.6.0
但是CommandLineTools里面还有macos10.14的SDK:
1
/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0
通过
1
sudo xcode-select --switch /Library/Developer/CommandLineTools
来切换SDK路径
用
1
ruby -rrbconfig -e 'puts RbConfig::CONFIG["rubyhdrdir"]'
可以看到路径正确。
之后bundle install
可以正常安装。
需要切换回xode11的sdk时:
1
sudo xcode-select --switch /Applications/Xcode.app
评论系统的选择
博客之前采用多说作为评论系统,可是多说关闭了,类似的友言、网易云跟帖等国内评论系统也相继停止服务。Disqus在国内一直被墙,需要重新选择一个评论系统。
看了几天,基本瞄中了基于github issue的评论系统,如果blog也host在github上,那么就很相得益彰。它的数据也没那么容易丢失,除非github倒闭。。。
一开始选择了名气较大的gitment,试用用了一下发现目前已不可用了:
由于采用github API操作issue,因此带来了跨站(CORS)问题,而github禁止跨站,无法直接访问。
解决办法是加一个中间代理服务器,给服务器返回头上添加跨站运行标志。
gitment作者本来自己搭了个代理服务器给大家使用,可是现在已经停服了,如果自己搭代理服务器代价还是颇高的。
而作者已经弃坑,两年多没有更新了,无奈弃之。
后来发现了类似的评论系统:gitalk ,最近一年还在更新,试了下目前可用。
它是怎么解决跨站问题呢?抓包看了下,发现它采用了Heroku提供的API,专门用于转发请求并允许CORS访问:https://cors-anywhere.herokuapp.com
看来允许跨站请求头是个比较常见的问题。
gitalk的接入方式类似gitment:
首先要在github中新建一个OAuth Application,记下Client ID和Client Secret
修改_layouts下面的post.html,在最下面添加:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<section id="comment">
<h1 class="title">Comments</h1>
<div id="gitalk-container"></div>
<link rel="stylesheet" href="https://unpkg.com/gitalk/dist/gitalk.css">
<script src="https://unpkg.com/gitalk/dist/gitalk.min.js"></script>
<script>
const gitalk = new Gitalk({
clientID: 'GitHub Application Client ID',
clientSecret: 'GitHub Application Client Secret',
repo: 'GitHub repo',
owner: 'GitHub repo owner',
admin: ['GitHub repo owner and collaborators, only these guys can initialize github issues'],
id: location.pathname, // Ensure uniqueness and length less than 50
distractionFreeMode: false // Facebook-like distraction free mode
})
gitalk.render('gitalk-container')
</script>
</section>
GitHub repo可以直接填blog所在的repo,方便集中管理。
博客发出之后需要自己先浏览并登录github账号,以初始化issue page
,之后就可以正常评论了。
Read on →