ブログ環境を jekyll 4.0.0 にアップデートした
このブログ構築に使っている jekyll を 4.0.0 にアップデートした。地味に長旅だったので流れを書いておく。
redcarpet を kramdown に
jekyll 4.0.0 から redcarpet が使えなくなり、記事のコンパイルが失敗するようになった。どうやらあまりメンテされていないのが原因でサポートを外されたらしい。
そもそも何でこれを使ってたんだっけレベルだったので、迷わず標準の kramdown に変えた。
Remove support for Redcarpet · Issue #6981 · jekyll/jekyll · GitHub
Ruby 環境を 2.6.5 に
jekyll 4.0.0 では Ruby 2.3 が非サポートになっている。元々2.5 系を使ってたのでそのまま使えはしたんだけど、この機会に環境をアップデートした。
rbenv で 2.6.5 をインストールして動かそうとすると以下のエラーに。
$ rbenv install 2.6.5
Downloading openssl-1.1.1d.tar.gz...
-> https://dqw8nmjcqpjn7.cloudfront.net/1e3a91bc1f9dfce01af26026f856e064eab4c8ee0a8f457b5ae30b40b8b711f2
Installing openssl-1.1.1d...
BUILD FAILED (OS X 10.15.2 using ruby-build 20191205)
Inspect or clean up the working tree at /var/folders/pz/y077p0k15rs71wdhzgvx4p_r0000gn/T/ruby-build.20200126000617.32087.OcxzSq
Results logged to /var/folders/pz/y077p0k15rs71wdhzgvx4p_r0000gn/T/ruby-build.20200126000617.32087.log
Last 10 log lines:
_s_server_main in s_server.o
"_verify_stateless_cookie_callback", referenced from:
_s_server_main in s_server.o
"_wait_for_async", referenced from:
_s_client_main in s_client.o
_sv_body in s_server.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[1]: *** [apps/openssl] Error 1
make: *** [all] Error 2
調べると openssl のインストール先を RUBY_CONFIGURE_OPTS
で指定する必要があるらしいという事が分かったが、これに似た問題の解決法は brew info パッケージ名
でヒントが載っていることを知った。リンカエラーが出たらまずパッケージ情報を見ると良いかもしれない。
ruby-build
パッケージには以下のような注記があった。
$ brew info ruby-build
ruby-build: stable 20191225, HEAD
…
To link Rubies to Homebrew's OpenSSL 1.1 (which is upgraded) add the following
to your ~/.zshrc:
export RUBY_CONFIGURE_OPTS="--with-openssl-dir=$(brew --prefix openssl@1.1)"
Note: this may interfere with building old versions of Ruby (e.g <2.4) that use
OpenSSL <1.1.
これに従い rbenv を実行すると正常に Ruby 2.6.5 がインストールできた。
RUBY_CONFIGURE_OPTS="--with-openssl-dir=$(brew --prefix openssl@1.1)" rbenv install 2.6.5
jekyll-sass-converter の実行時エラー
Sass を使ってないのに jekyll 本体が jekyll-sass-converter に依存している関係でハマった。どうやらこれが更に依存している sassc-ruby の新しいバージョンで問題が起こっているようだった。
2.2.0 causes LoadError · Issue #146 · sass/sassc-ruby
bundler: failed to load command: jekyll (/Users/horimislime/.ghq/github.com/horimislime/horimisli.me/vendor/bundle/ruby/2.6.0/bin/jekyll)
LoadError: Could not open library '/Users/horimislime/.ghq/github.com/horimislime/horimisli.me/vendor/bundle/ruby/2.6.0/gems/sassc-2.2.1/ext/libsass.bundle': dlopen(/Users/horimislime/.ghq/github.com/horimislime/horimisli.me/vendor/bundle/ruby/2.6.0/gems/sassc-2.2.1/ext/libsass.bundle, 5): no suitable image found. Did find:
/Users/horimislime/.ghq/github.com/horimislime/horimisli.me/vendor/bundle/ruby/2.6.0/gems/sassc-2.2.1/ext/libsass.bundle: load commands not in a segment
/Users/horimislime/.ghq/github.com/horimislime/horimisli.me/vendor/bundle/ruby/2.6.0/gems/sassc-2.2.1/ext/libsass.bundle: stat() failed with errno=25
/Users/horimislime/.ghq/github.com/horimislime/horimisli.me/vendor/bundle/ruby/2.6.0/gems/ffi-1.12.1/lib/ffi/library.rb:145:in `block in ffi_lib'
...
解決方法がなかなか見つからずウームという感じだったが、以下のスレッドで同じ問題にハマっていた人を見つけて解決。
gem uninstall sassc
gem install sassc —user-install
gem install sassc — —disable-march-tune-native
Jekyll fails on macOS Catalina - Help - Jekyll Talk
以上の流れでめでたく 4.0.0 でブログが生成できるようになった。