erbコマンドとerbライブラリの挙動の違い
Rubyを使ってHTML出力するスクリプトを書くために、erbを利用してみた。
まず .rhtml ファイルを作成し、erbコマンドで出力を確認。
erb hoge.rhtml > hoge.html
次にRubyスクリプトからerbライブラリを使って、出力を確認。
hoge_html = ERB.new(open("hoge.rhtml").read).result open("hoge.html", "w") { |f| f.write(hoge_html) }
ところがerbが思ったように動作せず、宣言されていない変数またはメソッドがあるというエラーを出力して止まってしまう。
ERB#src の出力を確認してみると、どうやらパーセント記号('%')で始まる行をRubyのコードと見なしてくれていないようだ。ドキュメントを調べてみると、ERB.newメソッドの trim_mode オプションで"%"を指定しないといけないらしい。
というわけで、Rubyスクリプトを以下のように修正して、問題は解決。
hoge_html = ERB.new(open("hoge.rhtml").read, nil, "%").result open("hoge.html", "w") { |f| f.write(hoge_html) }