環境構築(Windows7+ruby+apache2)

.....(apache2のインストールからサンプルCGIの表示まで)

@pagesでrubyのCGIを入れて遊ぶために、ローカルに開発環境を作ってみたいと思います。
ruby製サーバを使ったほうが楽ちんと聞きますが、ここは折角だからApache2を入れてみようと思います。

Apache2のインストール

Apachのサイトから「httpd-2.2.22-win32-x86-openssl-0.9.8t.msi」をダウンロードし実行します。
Index of /mirror/apache/dist//httpd/binaries/win32
http://ftp.meisei-u.ac.jp/mirror/apache/dist//httpd/binaries/win32/

途中の設定はこんな感じ。


ローカルで開発するだけなら、localhost/localhost/ほにゃらら@localhostで十分です。


難しいことはよくわからないので標準(typical)でインストールします。


「program files」の配下だとセキュリティダイアログがよく出るので「C:\apache2」にインストールします。

インストールが完了するとApache2が起動してるので、「http://localhost/」にアクセスするとなんか出て来ました。

スクリプト設置

今回インストールしたApache2.2.22は標準でインストールディレクトリの中の
「cgi-bin」ディレクトリにcgiファイルを配置するだけで実行できます。
今回は「C:\apache2\cgi-bin」です。

サンプルスクリプト(hello.cgi)

#!/ruby/bin/ruby
print "Content-type: text/html\n\n"
 
puts(<<"html")
  <html>
    Hello ruby!!
  </html>
html
 
  • ポイント! Windowsの場合、改行コードはCR+LFにしましょう!LFだとApache2が一行目のスクリプト名を認識できません。

改行コードをLFにした場合のエラーログ(C:\apache2\logs\error.log)

[Thu Nov 08 02:58:14 2012] [error] [client 127.0.0.1] (OS 2)指定されたファイルが見つかりません。  : couldn't create child process: 720002: hello.cgi
[Thu Nov 08 02:58:14 2012] [error] [client 127.0.0.1] (OS 2)指定されたファイルが見つかりません。  : couldn't spawn child process: C:/apache2/cgi-bin/hello.cgi
 

CGIの動作確認

http://localhost/cgi-bin/hello.cgi」にアクセスして「Hello ruby!!」が表示されれば成功です。

スクリプトがおかしい場合は、以下のような画面になります。

サンプルスクリプト解説

#!/ruby/bin/ruby
これはLinuxではお約束の記述で、一行目のコメントにこのスクリプトを処理して欲しいプログラムを指定します。
今回のは、「C:\ruby\bin\ruby.exe」にこのスクリプトを処理して貰おうとしています。

print "Content-type: text/html\n\n"
これはHttpレスポンスヘッダの一つ「Content-type」の指定で、「これから出力するコンテンツはhtmlです」と宣言しています。
最初にヘッダとして出力したい内容を出力することで、Apacheなどのサーバプログラムが
「これをヘッダに埋め込めばいいんだね」と理解してくれるCGIスクリプトの便利なオマジナイなのです。

puts(<<"html")
  <html>
    Hello ruby!!
  </html>
html
 
この記述は、rubyの複数行文字列の書き方で、<<"hogehoge"から始まり、hogehogeで終わる所までを複数行の文字列としてくれるのです。
この記述を活用すると、htmlの出力も簡単に記述出来るのです。

※複数行文字列を使わない場合はこんな事に
puts "<html>"
puts "  Hello ruby!!"
puts "</html>"
html
 
今回は3行しかないので全てputsで出力しても問題ありませんが、もっと行数が増えると大変です。


サンプルスクリプトの解説は後で別のページに移動しよう…
環境構築(Windows+ruby+apache2)その2???に続きます。