mod_ruby for Windows + Apache 2.2

コーディングをしようと思ったけど酒飲んでるので無理!
かわりにmod_rubyをWindows + Apache 2.2でビルドした。

ビルド環境

ビルド手順

1.ASRのwin32.hに以下のパッチを充てる。
--- win32.h.orig        2007-12-01 00:59:39.875000000 +0900
+++ win32.h     2007-12-02 23:49:59.062500000 +0900
@@ -118,8 +118,8 @@

 #define close(h)               rb_w32_close(h)
 #define fclose(f)              rb_w32_fclose(f)
-#define read(f, b, s)          rb_w32_read(f, b, s)
-#define write(f, b, s)         rb_w32_write(f, b, s)
+#define _read(f, b, s)         rb_w32_read(f, b, s)
+#define _write(f, b, s)                rb_w32_write(f, b, s)
 #define getpid()               rb_w32_getpid()
 #define sleep(x)               rb_w32_sleep((x)*1000)
 #ifdef __BORLANDC__
2.Apache/Rubyのインクルードファイル/ライブラリにパスを通して、mod_rubyをマルチスレッド(/MT)でビルド。
3.mod_rubyのライブラリを$RUBY_HOME/lib/ruby/site_ruby/1.8配下にコピーして、apache/ruby-run.rbに以下のパッチを充てる。
--- ruby-run.rb.orig    2005-08-03 10:32:41.000000000 +0900
+++ ruby-run.rb 2007-12-03 00:39:29.921875000 +0900
@@ -69,10 +69,10 @@
        r.log_reason("Options ExecCGI is off in this directory", r.filename)
        return FORBIDDEN
       end
-      unless r.finfo.executable?
-       r.log_reason("file permissions deny server execution", r.filename)
-       return FORBIDDEN
-      end
+#      unless r.finfo.executable?
+#      r.log_reason("file permissions deny server execution", r.filename)
+#      return FORBIDDEN
+#      end
       return OK
     end
4.httpd.confに以下を追加。
LoadFile "C:\usr\local\ruby-1.8\bin\msvcrt-ruby18.dll"
LoadModule ruby_module modules/mod_ruby.so

<IfModule mod_ruby.c>
  #RubySafeLevel 0
  #RubyKanjiCode euc
  RubyRequire apache/ruby-run

  <Files *.rb>
    SetHandler ruby-object
    RubyHandler Apache::RubyRun.instance
  </Files>

  RubyRequire auto-reload
</IfModule>
5.$APACHE_HOME/htdocs/hello.rb(↓)を実行。
print "Hello World.\n"