トップ «前の日記(2009年09月15日(Tue)) 最新 次の日記(2009年09月21日(Mon))» 編集 RSS feed

shinoのときどき日記


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にダウンロードし解凍する

http://flori.github.com/json/

※ダウンロードから最新版のtgzをダウンロード

3.jsonフォルダのlibの内容をcore/misc/libにアップロードする

4.section_footer2.rbを有効にする

あっ。酔ってたので、MLにjson_pureとか送っちゃった。これはJSON?何種類かJSONはあるようです。違いがよくわかっていません。

Tags: tDiary

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

Tags: tDiary

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を通しています。

Tags: tDiary

トップ «前の日記(2009年09月15日(Tue)) 最新 次の日記(2009年09月21日(Mon))» 編集 RSS feed
2000|03|
2007|01|03|04|05|06|10|12|
2008|01|02|03|04|05|06|07|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|11|12|
2015|01|02|04|05|09|10|12|
2016|01|03|04|05|08|
2017|01|02|04|05|06|07|08|09|10|
2018|05|06|
2019|08|12|
2020|01|03|04|
2021|01|