2009年09月17日(Thu)
■ section_footer2.rbの導入
みなさまをお騒がせしまくって、なんとか、section_footer2.rbを導入できました。(tdtds,eto、ありがとうございます!)
たださんからのアドバイス
@freedomcat tDiaryからgemを使うと著しく性能が悪化するので、できればやめた方が……
[Twitter / ただただし: @freedomcat tDiaryからgemを使う ...より引用]
それから、etoさんから、「jsonをftpでおとしてきて、直にlibの下にもってくればokだと思う」というのを参考に、次の手順で、設定できました。
1.section_footer2.rb の require 'rubygems'をコメントアウトする
変更前
require 'rubygems'
変更後
#require 'rubygems'
2.jsonの最新版をftpでPCにダウンロードし解凍する
※ダウンロードから最新版のtgzをダウンロード
3.jsonフォルダのlibの内容をcore/misc/libにアップロードする
4.section_footer2.rbを有効にする
あっ。酔ってたので、MLにjson_pureとか送っちゃった。これはJSON?何種類かJSONはあるようです。違いがよくわかっていません。
■ section_footer2.rbのプチ改造
さて、section_footer2.rbをgem経由ではなく、jsonを直に参照するために、require 'rubygems'をコメントアウトしてしまったのだけれど、svn upするたびに、書き換えるのは面倒くさいしエレガントではないと思ったので、「もしgem環境(環境変数$GEM_HOME)が設定されている場合は、rubygemsをrequireする」という判定をするのをコードに入れるのはどうかと考え次のようなコードを提案してみました。
if $ENV{'GEM_HOME'} then require 'rubygems' end
そうしたところ、まちゅさんが「rubygemsの依存を明確にするために次のようなコードを提案してくれました。
begin require 'json' rescue LoadError require 'rubygems' require 'json' end
これは、rubyのrescue修飾子という制御構造で、例外処理を行うものです。
begin 式1 rescue 例外 式2 end
式1の処理で例外(この場合はLoadError、requireができないときの例外)が発生した場合、式2を行うということなんですね。
まちゅさんが提案してくださったものは"require 'json'"が二度記述されているので、さらにたださんが次のようなコードを提案してくださいました。現在はたださんバージョンのものがコードに入っています。
begin require 'json' rescue LoadError retry if require 'rubygems' end
式2に該当するところで、retryという制御構造がでてきます。
begin 式1 rescue 例外 retry end
retryは、resucue節の中で使う場合、例外を補足した場合、beginからもう一度、式1の処理をやりなおすという意味です。
さらに、retryのあとにifが出てきてます。
begin 式1 resuce 例外 retry if 式2 end
この場合、例外を補足した場合、if後の式2の処理を行って、式2が正常な場合、式1の処理に戻ることを意味しています。
勉強になりました :D
■ section_footer2.rbを入れて、jsonもgemもない場合
section_footer2.rb設定するときに、jsonがない場合、次のエラーがあがることを確認しました。
Plugin error in '50sp.rb'. Plugin error in '/home/hoge/local/src/tdiary/contrib/plugin/section_footer2.rb'. no such file to load -- json (plugin/50sp.rb):132:in `load_plugin' (TDiary::PluginError)
core/misc/libにjsonを入れれば解決です。
jsonを取得する
http://rubyforge.org/projects/json/ で、最新版のjsonまたはjson_pureを確認する。
wget http://rubyforge.org/frs/download.php/62984/json-1.1.9.tgz tar zxvf ./json-1.1.9.tgz
※jsonのバージョンは最新のものを。
core/misc/libにjsonを入れる
cd ./json-1.1.9 cp -rp ./json* $TDIARY/core/misc/lib
※わたしは$TDIARYにsvnでダウンロードしてきたtdiaryのpathを通しています。