はじめに
RStudioのDockerコンテナを用意して、knitrを動かすところまでは問題なくできたのだが、knitrBootstrapを動かすところでハマったので、そのときの解決までのメモ
結論
pandocのバージョンが古いバイナリを使っててエラーが出ていた。バイナリファイルに変更すれば解決。
問題
- 別のRStudioコンテナで問題なく動いてたRmd(knitrBootstrapをYAML指定)のものが、自分で新たに立てたRStudioコンテナだと、エラーが出て、htmlファイルのアウトプット時に以下のエラーが出る。
pandoc: Could not find data file templates/default.html
Error: pandoc document conversion failed with error 97
Execution halted
試行錯誤
ひとまずググるとドンピシャのGithubのIsuueがある。
Pandoc crashes rendering a knitrBootstrap document
RStudioインストール時についてくるpandocが問題(壊れている)とか書いてある。それをリネームして、元のOSにインストールされているpandocをシンボリックリンクすればOKとのこと。
それのとおり、新しいPandocのバイナリファイルをゲットして、それに置き換えてみたところ動いた!
knitrBootstrapが動かなかったPandocのバージョンのもの
$ pandoc -v
pandoc 1.12.4.2
<snip>
knitrBootstrapが動いたPandocのバージョンのもの
$ pandoc -v
pandoc 1.13.1
<snip>
原因1
新しく立てたRStudioコンテナで利用したRStudioのイメージが古かったのか、古いRStudioのバージョンを使っていた模様...。Dockerイメージの管理が甘かった。0.99系なら問題なく動くのかな?
$ cat /usr/lib/rstudio-server/VERSION
0.98.1091
原因2
古いバージョンのPandocでもpandoc-templatesをダウンロードして、自分のホームの下に置けばうまくいく。rockerのRStudio Dockerfileでは、そうやってるみたいだけど、これをわざわざしてるのは別の理由があるのかな。
おわりに
RStudioのイメージファイルが散財していたので、ちゃんとDockerfileで管理しなければ。しかし、ひさびさにdocker buildすると、途中でエラーでて止まるの勘弁してほしい。