RubyでWeb日記を作ろう! の巻き
install to Vine Linux 2.1 CR
  Web日記とは、書いて字のごとく、Webで日記を書こうと言うもののようである。
良く分からんが、BBSってやつだろうか?
ま、それはともかく忘備録代わりにしていた日記を HTML で作る事をかなりサボり気味な今日この頃。
おれとしては、もう今更、という感はあるが LinuxMagazine に
  「Rubyで作るWeb日記システム」
という連載が始まった。
Ruby の勉強もしたいな、と思っていたので一石二鳥(であってほしい)と考えてやってみる事にした。
Web日記とやらを。

簡単、簡単、よーは、パソコンを使った日記でしょ?
Ruby を使って cgi(Common Gateway Interface)といって、Webサーバー上で動くプログラム)を使うってだけでしょ?(誰に聞いてんだ?)

この3つ。
  1. まずは ruby。
    これはVineLinuxを入れただけで入っていた(気がする)ので、問題なし。
    インストールディレクトリは /usr/bin/ruby。
    もしかしたらeRubyと言う奴も必要かも。

  2. 次に、apache。
    これが癖モンだった。
    <さんぷるcgi>を作ったらどうやっても動かなくて (Webブラウザで読み込むとスクリプトの内容が見えちゃう) 二日くらい頭を悩ましてた。
    wwwoffled入っているからこれが Web サーバーの代わりをやってくれるモンだとばかり。。。

    結局、Webサーバー=apache が必要でした。
    で、PC の中身を探したら apache が、、、なーーーい。ない、ない、どこにもなーーーい。
    誰だ、勝手に抜いたのは!(って、おれか?)
    melchior(Slackware)、balthazer(VineLinux2.0CR) には何も考えないで入っていたから、こっち (casper)にも入っているモンだとばかり思っていた。。。
    ちなみに casperの OS は
      VineLinux 2.1(UNIX USER 2001 JanのおまけCD vol.82)。

    インストールの時に「サーバーなんぞ、いらんわい」と思って抜いたのかな。
    インストールについては apache 1.3.14-0vl1.src.rpm
    を見るのじゃ。

    あと、念のために今後も自動起動出来るようになっているか確認するために
    $ /sbin/chkconfig --list | grep http
      > httpd     0:off  1:off   2:off   3:on   4:on   5:on  6:off を行って、 run level 3 5 で on になっている事を確認すること。

    (今までサーバー関係とは全くの無関係で生きて来た(これた)ので apache も cgi も何が何だかぜーーんぜんわからん)

      2001.09.02
      Vine Linux 2.1.5 を現在使用中。
      こっちには始めから apache 1.3.19 がインストールされていて、
      run level 3 5 で起動する様に設定されていた。

    とりあえず LinuxMagazineに載っていた cgi のサンプルを作ってみた。
    <さんぷるcgi>
    #!/bin/sh
    # s-cgi.cgi
    echo content-type: text/html
    echo ""
    echo "<html><body>"
    date
    echo "</body></html>"

    これに実行属性を付けて、( chmod +x s-cgi.cgi )
    /home/httpd/cgi-bin/ に持って行って、
    ブラウザから読み込むと現在時刻を表示する。
    味もそっけもない基本的な cgi。
    のはずが、、、、、うっっっごかねーー(怒!)

    ブラウザからディレクトリ構造(絶対、相対パスのことね)を辿っると動かなくて
      http://localhost/cgi-bin/s-cgi.cgi
    ってな感じで URL よろしく指定すると動くのね。
    早く言えよなー(だれが?)

    で、このままだと cgi は
      /home/httpd/cgi-bin/
    に置かないと実効できない。
    それ以外の場所( /home/httpd/s-cgi.cgi とか) に入れてもやっぱり
    中身が見えるだけ
       cgi 等の実効ファイルは
       cgi-bin/ に入れないと実行できない様、
       /etc/http/conf/httpd.conf で指定されている。
       でもこの時はそんな事知らないもん。
       今にしてみればあたりまえの事だけどさ。

    不便だからあとで何とかしよう。
      /etc/httpd/conf/httpd.conf
    を修正すればイケそう。

    ともあれ、 apache がちゃんと動いているかを確認する Welcome メッセージはブラウザから、
      http://localhost/
    で見ることが出来る。
    さっすが Vine、何もしないで見れました。
    しかも日本語のメッセージが。
    (今にして思えば、これが良くなかったかも。安心してロクに取説読まなかったもんな)。

    Welcom メッセージの本体は、 /home/httpd/html/index.html
    なんとなく、感で探したら一発で引当てちゃった。
    ちなみに、
    http://localhost:80/ は、 apache のWelcomeメッセージで、
    http://localhost:8080/にすると、wwwoffled の WelcomePage。
    うーーん、うまく住み分けてるな。

  3. browser
    ノープロブレム。 なーんも、いじらず。
    だって、いままで使っているんだもん。

後は雑誌の記事を鵜のみにしてそのままエディタでファイルを作成。
index.rb:
  Webサーバーから起動される cgi 本体。
  rubyで作成。
  これが日記の保存、段落アンカーの埋め込み等を行う。
update.html:
  日記の更新用フォーム。普段はこれを使うことになる。
  素人目にもかなりな手抜きでは。
  記入する日付、タイトル、本文をブラウザから入力。
  日付と本文(あたりまえ?)は必至。
  タイトルもデファクトスタンダードでは必要らしい。
tdiary.rb:
  クラス Paragraph, Diary, TDiay, TDiaryAppend の入ったもの。
  今後(?)複数の cgi スクリプトから共通に利用される。
  日記自身が Diaryクラスで、Paragraph クラスは日記中の段落を表現。
  TDiary クラスで1ヵ月分の日記を管理
  また、保存形式は PStore という
Ruby に標準添付されているデーター構造を使用。
  Ruby だけで書かれているので ISP 上で面倒が少ない。
  TDiaryAppend クラスは TDiary から継承されていて、
日記の更新、追加を表現。
  だそーだ。雑誌によると。
  一様中身を読んで見たけど、挫折した。

仕様
で、ここまで来ていて今更何だけど、「Web日記システム」には
  基本仕様(デファクトスタンダード)
というものがあるらしい。
  1. フォームに入力する事で日記の更新が出来る。
    他のFTPファイルとかを使わずに出来る。
    既存のWeb日記システムはこうはなっていないらしい。
    が、今んとこローカルのみの使いかたしか考えていないので、 嬉しくも何ともない。
  2. HTMLを意識しないでも日記を書けるが、HTMLタグを使用することも可能。
    システム自身はタグを付けない(余計なことはしない)から、 やりたきゃ勝手にやれって事だね。
  3. 段落アンカー(?)等の日記システムの
    デファクトスタンダードそんなん知らん)」に準拠。
    日記本文がここにあるとすると、
    サブタイトル1
      ここに本文を書く。
      行頭に空白のある文章は改良までをひとつのブロックとして認識する。
      改行が入ると、次のブロックになる。段落アンカーはサブタイトルの先頭に入る。

    サブタイトル2
      空改行が入ると、新規アンカーの埋め込まれた段落が始まる。

     サブタイトルなしで書きたい時は、空改行の後に空白を入れればそのまま段落の開始になる。サブタイトルとは太文字で表示されるかどうかの違い。同様に行頭にはアンカーが埋め込まれる。

    <pre>
    こうやって、段落の最初がHTMLタグで始まると、何もせずにそのまま表示する。アンカーも入らない。
    </pre>
とりあえず、雑誌に書いてある通に作ってみたら、
やっぱりはまった。

まず、よくわからないのが上の3つのファイルの置き場所。
index.rb は cgi ファイルのはずだから /home/httpd/httpd/cgi-bin/ で、
tdiary.rb は index.rb から読み込まれるから同じディレクトリかな。
で、update.html は何処でもよさそうだからとりあえず、無難にホームディレクトリに置いてみた。
/home/httpd/html/index.html があるんだけど、ちゃんと cgi-bin にある index.rb を実行してくれるのかな。
などと、試行錯誤を繰りかえしたが結局、...ダメだった

3つのファイルを
  /home/httpd/html/ と
  /home/httpd/cgi-bin/
の両方に入れたり、 .rb を .cgi にしたりしても
update.html の「更新」ボタンを押すと update.html のあるディレクトリがブラウザに表示されるだけ。
もちろん update.html は
  http://localhost/update.html
と指定していても。

しょうがないので初心に戻って、よーーーく、作成したファイルと原文 (LinuxMagazineに書いてあるモノ)を見比べてみると、、、つまんない記入ミスが何か所か。。。
動かない原因は全て記入ミスだった(トホホ...)

どのファイルを何処に置け、とか書いてくれない雑誌を怨んだりしたけど、update.htmlの中には
 <form method="post" action="./">
という記述があったり。。。
これって update.html のカレントにその他のファイルを置けって事じゃん。

あと、/etc/httpd/conf/httpd.conf の説明を読むと、キモのキーワードはそれほど多くない。
Options ExecCGI CGIの実行を許可
ScriptAlias
  /cgi-bin/
  /home/httpd/cgi-bin/
cgi 実行を許可するディレクトリ
DirectoryIndex index.rb クライアントがファイル名を指定せずにサーバーにアクセスした場合にデフォルトで転送するファイル(たち、複数指定可)
AddHandler cgi-script .rb .cgi .rb .cgi のファイルを見付けると CGI スクリプトとして 実行した結果をクライアントに渡す。

これらを修正するだけで、ちゃんとしたスクリプトなら動きます。
で、間違いを直した update.html を実行したら、、、、きちんと動きました。
全部。
雑誌に書いてある通りに。
あの、苦悩の数日は何だったんだろう。

/etc/httpd/conf/httpd.conf の修正
$ su -
# cd /etc/httpd/conf/
# cp -p httpd.conf httpd.conf.org
#
# vi httpd.conf

Options FollowSymLinks を
Options FollowSymLinks ExecCGI に修正

DirectoryIndex index.html index.htm index.shtml index.cgi を
DirectoryIndex index.rb index.html index.htm index.shtml index.cgi に修正
# AddHandler cgi-script .cgi を
AddHandler cgi-script .rb .cgi に修正

2001.09.24
この時点では気がついていなかったけど
実は、これも間違い。
まるっきり間違いではないのだけれど、書く場所が良くなかった。
正解はその2に書いてあるけど、
tDiary を置く場所を指定しないとうまく設定が反映されないみたい。
。。。みたいと書くのは未だに apache の設定が良く分かっていないから。

apache( Web server ) 再起動
# /etc/rc.d/init.d/httpd restart
これをしとかないと上で行った修正が反映されないので、ページにアクセス出来ない。

パーミッション変更
$ cd ~
$ mkdir public_html
$ cd public_html
$ mkdir cgi-bin
$ su -
# cd /home/
# chmod 755 user
$ touch ~/public_html/index.html

これで、/home/user/public_html/index.html を
  http://localhost/~user/
でブラウザから見ることが出来る。
ってか、パーミッションを開かないと apache がアクセスできなくて、
  Forbidden
と言われてしまう。

最後に。
結局、/home/httpd/html/update.html と
/home/user/public_html/update.html の両方を使えるようになった。

で、どっちを使うのが良いだろうか。
/home/httpd/ だとパーミッションがルートなので、
何か修正をするときは必ずルートになる必要がある。
また、/home/user/public_html/ を使おうとすると
/home/user/ 自身のパーミッションが
  0755、つまりユーザー user 以外の人が中身を見ることが出来てしまう。
うーーん、一長一短あって、悩ましい。

悩んだ結果、ホームディレクトリを使うことにした。
中身を見られるのは気持悪いけど所詮マイホーム LAN なので見る人はいないはずだし、
  /home/httpd/
を常に使うのはなんとなく違う気がする。
個人で使うものは、個人のホームディレクトリに入れておくのが スジ だと思う。

だから、/home/httpd/ 以下に新しく作ったファイルは全て消す事にした。

調子にのって
 おっしゃー、とにかく雑誌に載っている事は全て出来るようになったぞ。
CGIも大した事ないぜ!
これからは、ばりばり日記を書くぞー。
と、思ったけど、書くだけでその日記を見ることが全然できねーぞ?
書きっぱなしか?
と、人間の欲求は続くのでした。
来月は閲覧の記事だってさ。
また、はまるんだろうな。



やりたいこと。
背景色の変更。灰色だけ、ってのは寂しい。


その2へ



戻る