[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[debian-users:48288] Re: eRubyが動かない (sarge --> etch)
杉浦です。
>>> In Message "[debian-users:48198] Re: eRubyが動かない (sarge --> etch)"
>>> <20070322035638.GD19883@xxxxxxxxxxxxxxxxxxxxx>,
>>> KAWAFUJI Mitsuhiro <kawafuji@xxxxxxxxxxxxxxxxxxxxx> said;
> |<% puts 1+2 %>のような簡単なrhtmlに対して
> |試してみたところ、eRubyによる処理は行われるものの、
> |Content-Type: application/x-httpd-eruby で返ってくるので
> |ブラウザがバイナリ扱いで保存しようとしますね。
> |/usr/lib/ruby/1.8/apache/eruby-run.rbの末尾のほうに
> |
> | unless r.content_type
> | r.content_type = format("text/html; charset=%s", ERuby.charset)
> | end
> |
> |というところがあるのですが、このときにr.content_typeには
> |「application/x-httpd-eruby」がすでに入ってしまっているため、
> |text/htmlへの書き換えが行われることなくContent-Typeの出力が
> |されてしまっているようです。
> |このunless行とend行をコメント化してApache2をreloadすると、
> |text/html形式でブラウザで正常に表示されます。
> 確認しました。Wiresharkでパケットをモニタすると、確かに、何もし
> ない状態だとContent-Typeとしてapplication/x-httpd-erubyを送ってき
> ていますね。上記ご指摘のコメントアウトを行なうとtext/htmlを返して
> きて、ブラウザ上にeRubyスクリプトの実行結果が表示されます。
> |このあたりはmod-ruby側では何も変えてないようなので、RubyかApacheの
> |変更が何か影響しているのだろうとは思います。
直接的な原因は /etc/mime.type に rhtml の定義が追加され
(ることを Apache::ERubyRun が想定していなかっ)た為のようです。
解決策としては
* /etc/mime.typs から application/x-httpd-eruby rhtml を消す
(apacheの再起動が必要)
* apache の設定に (.htaccess でも httpd.conf でも)
AddType "text/html; charset=euc-jp" .rhtml .htm
とか書いておく。ただしこの場合は ERuby.charset の指定は効かなくなる。
# TypeConfig で設定された値に RemoveType が効けばいいのですが……
* Apache::ErubyRun 側で設定されている content-type が
application/x-httpd-eruby なら上書きするようにする
のどれかでしょうか。
最終的には最後のものが良いと思いますが、これは ruby 側の話ですね。
# ruby-dev に転送しときます。
--
Tatsuki Sugiura mailto:sugi@xxxxxxxxxxxxxxxxxxxxxxxxxxx