Category ruby.

$LOAD_PATH.unshift するのがめんどい。SetEnv なんてディレクティブ知らなかった。そんな感じなので SetEnv RUBYLIB /virtual/lowreal/lib/ruby:/virtual/lowreal/lib/ruby/i686-linux を public_html 直下の .htaccess に追記。ローカル環境の拡張ライブラリは普通にインストールするように。

  1. トップ
  2. ruby
  3. .htaccess SetEnv RUBYLIB

よくわからないセクションタイトルだけど、どうしても Ruby on Rails を使う気にならない。でも使えたほうが 2.0 っぽくてかっこよさそう、というか Ruby 書けるとか言うくせに Rails 触ったことないなんて言ったら怒られそうだし、嫌だなぁ。ていうか 2.0 っていうのが胡散臭くてどうも苦手っていうか、そういう方向は好きなんだけど、2.0って何よっていうか、Ruby 2.0 楽しみだなぁ。でもプログラムかいてて楽しいってバージョン 0.2 ぐらいじゃないですか、みたいな、よくわからない脳内回路。

まずバックエンドのデータベースが MySQL とか PostgreSQL とかだと、データの実態が見えなくて気持ち悪すぎ。SQLite はよさげなんだけど、なぜか上手くインストールできない。別に SQL とか DB 自体が嫌いとか苦手なんじゃないんだけど、データの管理方法が手の届かないところにあるのは耐えられない。

こう、Rails でものっすっげぇアプリケーションがあって、それが現状を何かしらすっごい勢いで面白くするなら、もうちょっと必死こいて使う気に (そのプログラムを読んで改造する気=ハックする気、に) なるのかもしれないんだけど、どうも開発が超ハヤイ!とか、MVC!とかデータベース超扱いやすいとかいう話ばっかりで、どんなアプリケーションがあるのかよくわからん。知ろうとしていないだけかもしれないけど、なんだかよくわからない。

  1. トップ
  2. ruby
  3. Ruby on Rails を使う気になりたい

ちゃんとエラークラス吐くバージョンがリリース。kiyoya さんのパッチ。

ruby extconf.rb --enable-error-handler して Makefile 作成。ちゃんと exslt もリンクさせるため、OBJS に /lib/libxml2.dll.a /lib/libexslt.dll.a /lib/libxslt.dll.a を追加。なんか知らんけど明示的に指定しないとリンクされなくて ld が怒る@cygwin (このバージョンに限らず)

XML::XSLT::XSLTError と、そのサブクラス XML::XSLT::ParsingError, XML::XSLT::TransformationError が追加される。変換用 XML ファイルのエラーなのか、XSLT ファイルのエラーなのかはわからなく。そのかわりエラー発生のタイミングが変わった。serve 時ではなく、xml= のときに出るようになった。だから問題ない。

エラーの message の意味がないっぽいので、--enable-error-handler 時には rb_raise 第2引数を STR2CSTR(rb_ary_to_s(rb_cvar_get(cXSLT, rb_intern("@@errors")))) とかにしたほうがいい感じ。--enable-error-handler は errors が定義されるのがキモイけど俺はそんなに気にならない。

第二引数を変えるだけだと以下のコードがダメ。

xslt = XML::XSLT.new()
xslt2 = XML::XSLT.new()
begin
xslt.xml = File.read("examples/fuzface.xml")
xslt.xsl = File.read("examples/fuzface.xsl")
out = xslt.serve()
print out;
rescue XML::XSLT::XSLTError => e
p XML::XSLT.class_eval("@@errors") #=> (1)
p e.message #=> (2)
end
p XML::XSLT.class_eval("@@errors") #=> (3)
begin
xslt2.xml = File.read("examples/fuzface.xml")
xslt2.xsl = File.read("examples/fuzface.xsl")
out = xslt2.serve()
print out;
rescue XML::XSLT::XSLTError => e
p e.message  #=> (4)
end

(3) で (2) のときと同じ (4) のとき前のエラーメッセージが紛れ込む。クラス変数使ってるからだろうけど、単純にインスタンス変数にしないのにはなんか理由があるんだろうからとりあえずそのままにして、

void xslt_raise(VALUE cError) {
#ifdef USE_ERROR_HANDLER
VALUE errors = rb_cvar_get(cXSLT, rb_intern("@@errors"));
VALUE error_str = rb_ary_to_s(errors);
rb_ary_clear(errors);
rb_raise(cError, STR2CSTR(error_str));
return;
#endif
rb_raise(cError, "");
}

とか作って経由させ、リセットさせてみる。XML::XSLT.errors は常に空の配列が返るようになって無意味になる。

ruby-xslt.0.9.1.error_message.patch

スレッドの切り替えってどういうタイミングなんだろう。

  1. トップ
  2. xslt
  3. ruby-xslt 0.9.1
  1. トップ
  2. ruby
  3. ruby-xslt 0.9.1
  1. トップ
  2. xml
  3. ruby-xslt 0.9.1