[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