Octopress で関連ページを表示する

Posted Sat Mar 08 2014

Octopress で投稿した記事に関連ページを表示するようにしました.Octopress には標準で関連ページを表示する機能が備わっているので,それを利用します.

Octopress のテンプレートの編集

source/_includes/post/related_posts.html を作成し,下記の項目を入力します.limit のところが表示する関連ページの記事数を表します.適宜変更してください.

{% raw %}
{% if site.related_posts %}
  <h2>Related posts</h2>
  <ul class="posts">
  {% for post in site.related_posts limit:5 %}
    <li class="related">
      <a href="{{ root_url }}{{ post.url }}">{{ post.title }}</a>
    </li>
  {% endfor %}
  </ul>
{% endif %}
{% endraw %}

記事のテンプレートから上記の html を include します.source/_layouts/post.html を開き,下記のラインを追加します.表示したい位置に合わせて適宜変更してください.今回は共有ボタン関連の後ろに表示するようにしました.

{% raw %}
<footer>
  <p class="meta">
    {% include post/author.html %}
    {% include post/date.html %}{% if updated %}{{ updated }}{% else %}{{ time }}{% endif %}
    {% include post/categories.html %}
  </p>
  {% unless page.sharing == false %}
    {% include post/sharing.html %}
  {% endunless %}
+ {% include post/related_posts.html %}
  <p class="meta">
    {% if page.previous.url %}
{% endraw %}

_config.yml に下記のフラグを追加します.

lsi: true

rake generate で関連ページが生成されるようになります.一応これだけで生成自体はできるのですが,処理がものすごく遅いです.Runnning the classifier 部分で記事の分類を行っているようなのですが,めちゃめちゃ時間がかかります.そこでメッセージにある通り,gsl を導入しパフォーマンスを改善します.

$ rake generate
## Generating Site with Jekyll
identical source/stylesheets/screen.css
Configuration from /home/daisuke/Projects/blog/octopress/_config.yml
Notice: for 10x faster LSI support, please install http://rb-gsl.rubyforge.org/
Building site: source -> public
Running the classifier... this could take a while.
........................................

GSL のインストール

下記のコマンドを実行し,gsl をインストールします.apt でインストールすると 1.16 がインストールされますが,最新のものでは動かないようなので 1.14 をインストールします.

$ wget http://ftp.gnu.org/gnu/gsl/gsl-1.14.tar.gz
$ tar xvf gsl-1.14.tar.gz
$ cd gsl-1.14
$ ./configure
$ make
$ sudo make install

下記のコマンドで gsl の 1.14 がインストールされているか確認します.

$ gsl-config --version
1.14

Gemfile の development group に下記の項目を追加し,bundle install を実行します.

gem 'gsl'

rake generate をすると classifier 部分が高速化されていることが確認できると思います.それでも 1-2 分かかってしまいますが...

参考