よしむらのブログ


[サイト管理] tDiary 4.0.1へのアップデート

2014年2月20日追記:

tDiaryユーザー掲示板にて質問したところ、ただただしさんにblogkitを修正していただいた。これによりtDiary 4.0.2とblogkitの組み合わせでも動くようになった。

本エントリーは今後同様のことが起きた際に参考になるかもしれないので残しておく。tDiary 4.0.2 + blogkitについては別エントリーを参照していただきたい。


tDiaryを最新版に上げる件、結局最新の4.0.2ではblogkitと組み合わせるとうまく動かすことができず、試行錯誤の末4.0.1では動くようになった。以下その記録。

前提

動作環境はRuby 2.1.0とgem 1.8.25をさくらのレンタルサーバにインストールするで整備したもの。詳細は以下の通り。

  • さくらのレンタルサーバ 
    • FreeBSD 7.1-RELEASE-p16 (SAKURA11S) #0: Fri May 4 06:01:53 JST 2012
  • $HOME/localにインストールしたruby 2.1.0p0 (2013-12-25 revision 44422) [i386-freebsd7.1]
  • $HOME/local/lib/ruby/gemsにインストールしたRubyGems 1.8.25

もともと$HOME/www/blogにtDiary 3.1.0がインストールされている。すなわち、今回行うのは運用中のblogのシステムの入れ替えである。いきなり上書きは怖いので、とりあえず$HOME/www/blog-4.0.xにインストールし、成功したらblogと入れ替えることとする。

念のためデータディレクトリをバックアップしておく。

なお、以下$HOMEおよび ~ は /home/yoshimura-s を指す。文中やシェルスクリプトでは$HOMEと書くが、コマンドプロンプトでは ~ を使用、またエラーメッセージでは /home/yoshimura-s と表示されている。

tDiary 4.0.2での経緯

本題ではないので手短に。

本家のダウンロードページからtdiary-full-v4.0.2.tar.gz, tdiary-blogkit-v4.0.2.tar.gz, tdiary-contrib-v4.0.2.tar.gzを入手し、指示通りにインストール。Bundlerのインストールとbundle installの実行やシェバング行の書き換えなどを行ったが、styleまわりのnamespace変更の関係からか、記事が表示できなかった。

    500 Internal Server Error

    uninitialized constant BlogwikiDiary (NameError)

    /home/yoshimura-s/www/blog-4.0.2/tdiary/io/base.rb:49:in `const_get'
    /home/yoshimura-s/www/blog-4.0.2/tdiary/io/base.rb:49:in `block in load_styles'
    /home/yoshimura-s/www/blog-4.0.2/tdiary/io/base.rb:48:in `each'
    /home/yoshimura-s/www/blog-4.0.2/tdiary/io/base.rb:48:in `load_styles'
    /home/yoshimura-s/www/blog-4.0.2/tdiary/io/base.rb:15:in `initialize'
    /home/yoshimura-s/www/blog-4.0.2/tdiary/base.rb:24:in `new'
    /home/yoshimura-s/www/blog-4.0.2/tdiary/base.rb:24:in `initialize'
    /home/yoshimura-s/www/blog-4.0.2/tdiary/view.rb:8:in `initialize'
    /home/yoshimura-s/www/blog-4.0.2/tdiary/view.rb:316:in `initialize'
    /home/yoshimura-s/www/blog-4.0.2/tdiary/dispatcher/index_main.rb:104:in `new'
    /home/yoshimura-s/www/blog-4.0.2/tdiary/dispatcher/index_main.rb:104:in `create_tdiary'
    /home/yoshimura-s/www/blog-4.0.2/tdiary/dispatcher/index_main.rb:21:in `run'
    /home/yoshimura-s/www/blog-4.0.2/tdiary/dispatcher/index_main.rb:6:in `run'
    /home/yoshimura-s/www/blog-4.0.2/tdiary/dispatcher.rb:26:in `dispatch_cgi'
    index.rb:32:in `<main>'

BlogKitのみGitHubで取得できる最新版(2014年2月11日現在)を入れることで、トップページは表示できるようになった。しかし、記事単位の表示をしようとすると、下記のようなエラーが出る。

    Plugin Error

    Errors in plugins? Retry to Update or Configure.

    NoMethodError
    undefined method `stripped_title' for #<TDiary::Style::BlogwikiDiary:0x2150c62c>
    (plugin/title-navi.rb):54:in `navi_prev_diary'
    (plugin/00default.rb):307:in `index_page_tag'
    (plugin/00default.rb):213:in `block (2 levels) in load_plugin'
    /home/yoshimura-s/www/blog-4.0.2/tdiary/plugin.rb:111:in `call'
    /home/yoshimura-s/www/blog-4.0.2/tdiary/plugin.rb:111:in `block in header_proc'
    /home/yoshimura-s/www/blog-4.0.2/tdiary/plugin.rb:110:in `each'
    /home/yoshimura-s/www/blog-4.0.2/tdiary/plugin.rb:110:in `header_proc'
    (TDiary::Plugin#eval_src):5:in `block in eval_src'
    /home/yoshimura-s/www/blog-4.0.2/tdiary/plugin.rb:99:in `eval'
    /home/yoshimura-s/www/blog-4.0.2/tdiary/plugin.rb:99:in `block in eval_src'
    /home/yoshimura-s/www/blog-4.0.2/tdiary/core_ext.rb:112:in `block in safe'
    /home/yoshimura-s/www/blog-4.0.2/tdiary/core_ext.rb:114:in `call'
    /home/yoshimura-s/www/blog-4.0.2/tdiary/core_ext.rb:114:in `safe'
    /home/yoshimura-s/www/blog-4.0.2/tdiary/plugin.rb:98:in `eval_src'
    /home/yoshimura-s/www/blog-4.0.2/tdiary/base.rb:66:in `do_eval_rhtml'
    /home/yoshimura-s/www/blog-4.0.2/tdiary/base.rb:30:in `eval_rhtml'
    /home/yoshimura-s/www/blog-4.0.2/tdiary/view.rb:140:in `eval_rhtml'
    /home/yoshimura-s/www/blog-4.0.2/tdiary/dispatcher/index_main.rb:43:in `run'
    /home/yoshimura-s/www/blog-4.0.2/tdiary/dispatcher/index_main.rb:6:in `run'
    /home/yoshimura-s/www/blog-4.0.2/tdiary/dispatcher.rb:26:in `dispatch_cgi'
    index.rb:32:in `<main>'

これ以上追うのは私には無理と判断し、一つ前の4.0.1を入れることにした。以下はその手順。

入手

GitHubからtdiary-core、tdiary-theme、tdiary-contrib、tdiary-blogkitの、それぞれv4.0.1をダウンロードする。今回はgitを使わずwebからもらうこととする。ローカルPCのブラウザでzipをダウンロードする場合は以下の手順となる。

  • 各リポジトリの[branch:master]と表示されているボタンをクリック
  • [Tags]のタブを選択してv4.0.1をクリック
  • ページ右の[Download ZIP]ボタンをクリック

取得したZIPファイルをサーバの適当な場所にFTPでアップロードしてunzipする。

もしくは、上記の手順で表示されたDownload ZIPボタンのリンクURLをコピーしてサーバ上でwget。私の環境ではサーバ認証が通らず、--no-check-certificate でダウンロード可能だったが、セキュリティ的には非推奨。

Webへの公開ディレクトリにコピー

「前提」での方針に伴い、上記のunzipでできたtdiary-core-4.0.1を$HOME/www/blog-4.0.1にひとまずコピーする。

    %cp -rp tdiary-core-4.0.1 ~/www/blog-4.0.1

blogkit、contrib、themeについてはそれぞれ上記ディレクトリの下にコピーする。

    %cp -rp tdiary-blogkit-4.0.1 ~/www/blog-4.0.1/blogkit
    %cp -rp tdiary-contrib-4.0.1 ~/www/blog-4.0.1/contrib
    %cd tdiary-theme-4.0.1
    %cp -rp * ~/www/blog-4.0.1/theme

.htaccess、tdiary.confのコピー

.htaccessおよびtdiary.confについて、入手した4.0.1に含まれるサンプル(dot.htaccess及びblogkit/tdiary.conf.sample_ja)と従来の3.1.0で運用していたものを比較し、大きな変更がないことが確認できたので、従来のものをコピーする。

    %cd ~/www/blog-4.0.1
    %cp ../blog/.htaccess .
    %cp ../blog/tdiary.conf .

ただしtdiary.confについては最初に下記の行を追記。

    @lang = 'ja'

なお、プラグインのパスについては、上記のコピーによってできたディレクトリ構成に合わせて下記のように設定してある(localについては後述)。

    # プラグインのパスの設定
    #
    @options['sp.path'] = ['misc/plugin', 'blogkit/plugin', 'contrib/plugin', 'local/plugin']

実行ファイルのシェバング行の書き換え

オリジナルのシェバング行は

    #!/usr/bin/env ruby

となっているが、今回の環境では/usr/bin/envが使えないので、/home/yoshimura-s/local/bin/rubyに書き換える。 対象はindex.rb、update.rb、bin/tdiary、misc/convert2.rb、misc/migrate.rb。 下記のようなシェルスクリプトで実行した。

    #!/bin/sh

    cd $HOME/www/blog-4.0.1

    for f in index.rb update.rb bin/tdiary misc/convert2.rb misc/migrate.rb
    do
        echo $f
        cp $f ${f}.org
        cat ${f}.org | sed -e 's/\/usr\/bin\/env ruby/\/home\/yoshimura-s\/local\/bin\/ruby/' > $f
    done

スタイル、テーマ、JavaScriptのリンク生成

READMEではコピーするように指示されているが、シンボリックリンクで対処。

スタイル:

    %cd ~/www/blog-4.0.1/tdiary
    %ln -s ../blogkit/tdiary/blog_style.rb
    %ln -s ../blogkit/tdiary/blogwiki_style.rb

テーマ:

    %cd ~/www/blog-4.0.1/theme
    %ln -s ../blogkit/theme/blog

contribのsocialbuttonプラグインを使うためにはJavaScriptも必要。

    %cd ~/www/blog-4.0.1/js
    %ln -s ../contrib/js/jquery.socialbutton.js
    %ln -s ../contrib/js/socialbutton.js

プラグインの追加インストール

投稿日時表示機能のプラグイン postedat.rb を使用しているので、これをインストール。先に設定したlocal/pluginに入れることとする。

配布元から入手してコピーするだけ。

    %wget -O postedat-0.3.tar.gz "http://www.hiraku.ro/?c=plugin;plugin=attach_download;p=postedat;file_name=postedat-0.3.tar.gz"
    %tar zxvf postedat-0.3.tar.gz
    %cd postedat-0.3
    %cp -rp * ~/www/blog-4.0.1/local/plugin

Bundlerのインストールと実行

Bundlerは、プロジェクトに必要なRubyライブラリを整合性を保ってインストールする仕組み、とでも言えば良いだろうか。現在のtDiaryではこのBundlerを使ってライブラリ管理をしている。私は初めて使ったのだが非常に便利である。

既にRubyGemsを入れてあるのでインストールは簡単。

   %gem install bundler

これだけで使えるようになる。

実行する前に、少し環境を整える。まずwww/blog-4.0.1に.bundleというディレクトリを作る。

   %cd ~/www/blog-4.0.1
   %mkdir .bundle

$HOME/blog-4.0.1/.bundle内にconfigという名前の設定ファイルを作成する。内容は以下の通り。

    ---
    BUNDLE_PATH: ".bundle"
    BUNDLE_WITHOUT: coffee:memcached:redis:gfm:server:development:test
    BUNDLE_DISABLE_SHARED_GEMS: '1'

この状態で、$HOME/www/blog-4.0.1にてbundle installを実行する。

   %cd ~/www/blog-4.0.1
   %bundle install

これにより、$HOME/www/blog-4.0.1/.bundle/ruby/2.1.0/ に必要なライブラリがインストールされる。

これでOKのはず。さてブラウザからアクセスすると…

    500 Internal Server Error

    cannot load such file -- bundler/setup (LoadError)

    /home/yoshimura-s/local/lib/ruby/site_ruby/2.1.0/rubygems/custom_require.rb:36:in `require'
    /home/yoshimura-s/local/lib/ruby/site_ruby/2.1.0/rubygems/custom_require.rb:36:in `require'
    /home/yoshimura-s/www/blog-4.0.1/tdiary/environment.rb:6:in `<top (required)>'
    /home/yoshimura-s/local/lib/ruby/site_ruby/2.1.0/rubygems/custom_require.rb:36:in `require'
    /home/yoshimura-s/local/lib/ruby/site_ruby/2.1.0/rubygems/custom_require.rb:36:in `require'
    /home/yoshimura-s/www/blog-4.0.1/tdiary.rb:26:in `<top (required)>'
    /home/yoshimura-s/local/lib/ruby/site_ruby/2.1.0/rubygems/custom_require.rb:36:in `require'
    /home/yoshimura-s/local/lib/ruby/site_ruby/2.1.0/rubygems/custom_require.rb:36:in `require'
    index.rb:18:in `<main>'

orz

Bundlerをコピー

上記エラーメッセージはbundler/setupがロードできないと言っている。一方Bundlerはインストール済み。

Bundlerがインストールされている$GEM_HOME/gemsがWebサーバにとってはロードパス外であることが問題であるようだ。今回の環境ではこれをどうにかするのは面倒になりそうに思えたので、安易にまるごとmisc/libにコピーしてしまうこととする。

    %cp -rp $GEM_HOME/gems/bundler-1.5.3 ~/www/blog-4.0.1/misc/lib

これで改めてブラウザからアクセスすると…正常に表示された!!

従来環境との入れ替え

blog-4.0.1をblogとして公開する。

    %cd ~/www
    %mv blog blog-3.1.0
    %mv blog-4.0.1 blog

これによって晴れてhttp://www.yoshimura-s.jp/blogでアクセスできるようになる。 プラグインの設定などは以前からキャリーされるが、念のため設定画面で確認し、必要に応じて適宜修正しておく。

2014年02月20日 00:44更新
2014年02月15日 01:37投稿

トップ «tDiary 4.0.1でのテスト書き込み 最新 tDiary 4.0.2へのアップデート» 編集