本書のサンプルプログラムを使用するためには、次のものが正しくインストールされていなけばなりません。
このページでは、Webサーバーが正しくインストールされているか確認し、サンプルプログラムをインストール・実行する手順を紹介します。Ruby/DBIのインストールについては、こちらを参照してください。
ユーザー名はfooとします。また、Webサーバーの公開ディレクトリは、/home/foo/public_html (~/public_html) とします。
まず、~/public_html ディレクトリに次のファイルを作成します(このファイルはテストが終わったら削除してください)。
#!/usr/local/bin/ruby require "etc" print "Content-Type: text/html\n\n" s = Etc.getpwuid() print "<pre>\n" s.each_pair {|sym, val| print "#{sym} -> #{val}\n"} print "</pre>\n"
実行許可を付し、シェルで実行します。
$ chmod 705 test.rb $ ./test.rb
実行結果は次のようになります。ユーザーfooが実行していることが分かります。
Content-Type: text/html <pre> name -> foo passwd -> x uid -> 504 gid -> 504 gecos -> dir -> /home/foo shell -> /bin/bash </pre>
Webサーバーから起動する前に、パーミションなどを確認します。
/home/fooディレクトリのパーミションを確認します。700であれば701に変更します(700ではエラー403が発生)。また、/home/fooおよび/home/foo/public_htmlは、自分以外が書き込み可能であってはいけません(エラー500が発生)。
$ chmod 701 /home/foo $ chmod 701 ~/public_html
次に、~/public_html/.htaccessファイルを修正します。本書では古典的なCGIインターフェイスを使っているので、次のようにします。mod_rubyなどを使う場合は、適宜変更してください。
Options -Includes +ExecCGI AddHandler cgi-script .cgi .rb DirectoryIndex index.cgi AddType text/css .css
これらの設定が終わってから、Webブラウザで呼び出します。
http://orange/~foo/test.rb
次のようにnameがfoo以外(apacheやwwwなど)になる場合は、suEXECが有効になっていません。この場合は、本書のサンプルプログラムで行っているセキュリティチェックを緩める必要があります。
name -> apache passwd -> x uid -> 48 gid -> 48 gecos -> Apache dir -> /var/www shell -> /sbin/nologin
画面に次のように表示されれば、suEXECが有効になっています。本書で期待するとおりに動いており、サンプルプログラムを修正する必要はありません。
name -> foo passwd -> x uid -> 504 gid -> 504 gecos -> dir -> /home/foo shell -> /bin/bash
サンプルプログラムのアーカイブファイルは、オーム社のWebサイトから入手します。
このファイルのディレクトリ構造は、次のようになっています。
ディレクトリ 含まれるファイル --------------------- ------------------------------------------ sample list 第1章から第17章までのSQL、スクリプトサンプル sample common 第18章、第19章の共通スクリプト priv pm 第19章の内部(非公開)スクリプト shop 第18章の内部(非公開)スクリプト public_html sample-pm 第19章の公開スクリプト sample-shop 第18章の公開スクリプト images 画像ファイル
ディレクトリを再配置します。
$ mkdir ruby $ mkdir wwwdata $ mkdir wwwdata/shop $ mkdir wwwdata/shop/session $ chmod 701 wwwdata $ chmod 701 wwwdata/shop
$ mv sample/sample/common ~ $ mv sample/sample/priv/shop ruby $ mv sample/sample/public_html/sample-shop public_html $ chmod 701 public_html/sample-shop $ cd public_html/sample-shop $ chmod 600 * $ chmod 666 default.css $ chmod 705 index.cgi logon.rb spec.rb cart.rb
上記の一連のコマンドにより、次のような構成になります。構成を変更する場合は、移動するディレクトリのファイルをrequireしているスクリプトを適宜書き換えます。
ディレクトリ 含まれるファイル --------------------- ------------------------------------------ ~ (/home/foo) common 共通スクリプト public_html sample-shop 公開ファイル images 画像ファイル ruby shop 第18章の内部(非公開)スクリプト wwwdata shop 内部データ
これに合わせて、設定ファイルconf.rbの内容を修正します。
PRIV_DIR = "/home/foo/wwwdata/shop/" TMPL_DIR = "/home/foo/public_html/sample-shop/"
カウンタファイルを作成します。
$ touch ~/wwwdata/shop/sale_counter
さらに、データベースプロファイルを作成します。データベース名、パスワードなどをスクリプト中に直接書くのは、セキュリティ、移植性の観点から避けるべきです。
次の内容の~/wwwdata/shop/dbpasswdファイルを作成します。「=」の右は実際にはタブ区切りで、データベース名、ユーザー名、パスワードを記述します。
customer_relationship=DBI:Pg:sample foo password