onDiary nDiaryのcgi版 nDiaryをローカルでなく、サーバの上で動かしたいと思いました。 FTPが使用できない/HTTPだけが使用できる環境でnDiaryを使いたかったからです。 1)nDiaryの動作 特別に何かした訳ではありません。 ・Rubyがcgiとして使えるサーバで ・nDiaryをインストール(各ファイルをコピー)して ・普段コマンドで打つ「ruby diary」という内容を実行するcgiを作り ・cgiには実行権限、cgiがいじるフォルダとファイルには読書権限の変更をした 以上です。 つまり、nDiary本体は**全く**(あるいはほとんど)いじっておらず、 おまけを付けただけです。 (以下、おまけの説明) 2)nDiaryに食わせる為の元日記テキストの作成 掲示板等と同じように、テキストを書き込む為のインタフェースが必要かと思いつけました。 ・パスワード制で本人(管理人)しか使えない ・日記テキストのファイル名は「YYYYMMDD.diary」(YMDは日付数字)で読み書き ・とりあえずYYYYMMDDはデフォルトは今日の日付、編集したら過去未来日付も可 ・で、指定したファイルを読み込んで(あるいは新規作成して)FORMの上で編集保存 ・上述の「nDiaryの動作」を実行 ・作成した日記ファイルへのリンクでジャンプ 以上です。 3)特別ルール cgi環境の上からは「TAB」の打ち込みができません。 ので、代わりに「全角空白4つ」を打ち込んでください。 プログラム内部で置換します。 4)プログラムの簡単な説明 ondiary/script/ diary 元のnDiaryのプログラム。 diary.cgi それのcgi化版。いわばテスト用。だから不要。 (日記元テキストは別途FTP等で用意し、生成だけするならこれ) ndiary-lib.rb nDiaryのいわば本体。 ndiary-custom.rb 一部修正版。    修正内容:関数mainは引数として定数ARGVを処理しているが、         これを変数argvに変更。(cgiではARGVを使用できないらしい)         (cgiからnDiary実行時のオプションをargvに入れてからmainを呼ぶ) ndiary.conf nDiaryの設定ファイル。 ondiary/log/ 日記テキストのYYYYMMDD.diaryとか保存します・してます。 日記雛型のXXXX.htmlとか保存します・してます。 トピック関連YYYYMM.topicとか保存します・してます。 ファイル・フォルダにcgiからの読書権限を付与が必要です。 ndiary.conf内で好きな位置に変更してください。(config.txtも変えてください) ondiary/www/ 生成した日記HTMLがおかれます。 ファイル・フォルダにcgiからの読書権限を付与が必要です。 ndiary.conf内で好きな位置に変更してください。(config.txtも変えてください) ondiary/ index.cgi インターフェース担当cgiです。基本的にこれが付加部分です。   操作方法:まあ、だいたい勘でお願いします。 config.txt 設定ファイル   一部ndiary.confとかぶってますが、ndiary.confの読解ルーチンを組むのが面倒くさかったので、二度手間ですがお願いします。   一般から読めないように属性変更しておくといいと思います。 webframe.rb インターフェース周りの処理とか。 5)インストール ndiary.confとconfig.txtを各自修正して、 一式サーバにアップしてください。 それから、index.cgiにアクセスしてみるという事で。 config.txtの読込権限は変更しておいた方がいいでしょう。 別の説明をしてみます。 貴方のnDiary環境において、ndiary-lib.rbのあるフォルダに、こちらのndiary-custom.rb(ondiary/script/ndiary-custom.rb)をコピーして下さい。 更に、適当なcgi実行のフォルダにindex.cgi,config.txt,webframe.rb,dummyout.rb(ondiary/*)をコピーして下さい。 index.cgiには実行権限、logフォルダとhtmlフォルダにはcgiからの読書権限、config.txtは他者から読まれないように権限設定、で、config.txtの中身を適時修正して下さい。 以上をごっそりサーバーに上げれば完了です。 6)ポイント数点 なんにでも書かれてる話ですが、動かない時に考えられる可能性は ・Rubyのパスが違ってる   cgiの一行目の「#!/usr/local/bin/ruby」を「!#/usr/local/env ruby」とか「#!/usr/bin/ruby」とかに書き換える ・パーミッションが通ってない   cgiファイルの実行権限とか、cgiが操作するフォルダの読書権限とか、「.htaccess」ファイルを直す/作るとか、 等でしょう。 なにがcgi用にいじってあるかというと、index.cgiの中のdiary_execという関数が、つまり従来のdiaryに相当しています。中身がごちゃごちゃしていますが、 ・ndiaryのあるフォルダに移動 ・標準出力とエラー出力(make...とかfinish...とかのメッセージ)を変数に格納 ・引数に関して改造しておいたndiaryのメインコマンドmainを呼び出し(ARGVで渡されるはずの引数はargvという名の配列変数で渡す)(改造mainはndiary-custom.rb内) というもので、実はdiaryの中と見比べて貰うと判りますが、ほとんど一緒です。 $stdoutは微妙に納得してないコードなので、pluginやfilterによっては、その出力が邪魔をしてcgiの出すインターフェース表示を狂わせる可能性があります。適時改造してください。 あと、うっかりしてたのですが、私はcgi(やそれが生成する元日記テキスト)の文字コードを、EUCにしております。これが結構ひっかかる場合があるらしいので、適時変換をお願いします。 7)既知の問題点 あるいは私の環境下だけかもしれません。 ・あまり重い処理をすると、cgiのタイムアウトにひっかかる可能性。  例えばbookstore_x.rb等ですね。オンライン書店を数点行脚してますから。  まだ試していませんが。 ・nDiary生成時のオプション指定の一部がおかしい?  おかしいような気もしたのですが気のせいかもしれません。 ・インターフェースが使いにくい  要望があれば直します。ので、連絡をお願いします。私にはセンスが無くって。 8)そのうち改造点 ・中身がからっぽの.diaryファイルは削除するように変更(試装中) ・生成後、日記に跳んだ時自動的にリロード(試装中) ・生成したら、数秒待ちで生成ページにジャンプするように変更(むしろ使い難い?) ・画像の削除(無指定でuploadしようとすると?) ぐらいを気にしつつ、まあいいかとほったらかしてる点です。 とまあ、そんなとこかな。 そんなとこでよろしくお願いします。 9)History 20030506 生贄版、-1号 ・動作確認 20030510 生贄版、0号 ・readme.txtを付加 ・日記にcssファイルを付加 ・操作表示に多少の説明を負荷 変更したけど別に要らない;index.cgi 追加;readme.txt,www/diary.css,www/lastdiary.css,www/pastdiary.css 20030511 正規公開版の1号 ・実は何度かUPし直してる ・操作表示の説明と一部メニュー修正 ・生成ファイルのパーミッションの不具合修正 ・nDiaryの出力メッセージをテンポラリファイルに保管しておいて表示 ・(不要とは思うがdiary.cgiも同上) ・日記テキスト入力時の枠サイズを設定可能に ・日記テキスト保存時、全角空白4つはTABに置換 変更;index.cgi 変更したけど別に要らない;index.html,config.txt,script/diary.cgi 削除;script/dummyout.rb 20030512 ・nDiaryの出力メッセージを自作クラスDummyOutで拾って表示に変更 変更;index.cgi 追加;dummyout.rb 変更したけど別に要らない;index.html,readme.txt 削除;script/.htaccess(消し忘れてた) 今回の変更は機能的にはなんもなし。 内部的に、一瞬テンポラリファイルができるのをやめただけ 20030513 ・webframeの本質的でない変更(CGIクラス勉強中) ・uploadボタンの試装、操作説明の微修正 ・簡単な入力ファイル名制限 !うっかりミス、パスワード不要にしてた 変更;index.cgi 変更したけど別に要らない;webframe,index.html,readme.txt 20030516 ・list表示に最終更新日付とサイズ ・リストや元日記テキストのテキスト表示とか即保存とか(隠しモード?)  サーバとクライアントのSYNCシステムへの布石、みたいな。 ・入力ファイル名制限の間違い修正 変更;index.cgi 既にあるけど必要になったもの;sffile.rb 変更したけど別に要らない;index.html,readme.txt 20030517 ・config.txtにDEFAULT_OPTIONを追加 ・index.cgiでlist表示の更新日時形式変更 変更;index.cgi 変更したけど別に要らない;config.txt,index.html,readme.txt 20030903 ・nDiary version0.9.3に変更 ・空白日記fileの削除試装、更新日記へのリロードリンク試装 ・config.txt内の指定で出力日記テキスト(.diary)のfilemode変更試装 ・ちょっとだけ整理整頓 ・$stdoutの処理を度外視。これによりplugin/filerで不具合やメッセージ漏れの可能性include 変更;index.cgi,script/以下,user/以下,log/*.html,www/*.css 不要になったもの;dummyout.rb,sffile.rb 変更したけど別に要らない;config.txt,index.html,readme.txt 20030904 ・upload(multipart/form-data)の不具合を修正 ・ついでに絵日記(画像upload)に対応 変更;index.cgi 変更したけど別に要らない;webframe.rb,ndiary.conf,config.txt,index.html,readme.txt 20030905 ・ユーザーカスタムのfilter/pluginをいじったり ・一発の不具合を追いかけたけど治らなかったり ・JISだった雛型fileをSJISにしたり ・nDiary version0.9.3.1に変更 変更;ndiary-lib.rb,ndiary-custom.rb,lib/topic.rb 変更したけど別に要らない;index.cgi,ndiary.conf,user/*,log/*.html,www/*.css 20030909 ・nDiary version0.9.3.1に変更 ・画像listをinterfaceに付加 ・他あちこちを遊びで修正 変更;ndiary-lib.rb,ndiary-custom.rb 変更したけど別に要らない; user/filter/enikki.rb,inlineimage.rb,cite.rb,bookstore_x.rb user/plugin/calender.rb,monthindex.rb user/lib/image_size.rb user/lib/date2.rb,holiday.rb user/lib/webagent.rb,cookie.rb,cache.rb,amazon.rb,bk1.rb www/diary.css 20030919 ・filter,pluginの追加修正(onDiaryでなく0.9.3対策) 変更したけど別に要らない; user/* 色々 log/* 色々 www/diary.css script/decorate.conf 20030920 /user/filter/bookstore_x.rb,sum_price_x.rb,custom.rb,head.rb /user/lib/cache_bib_tmp.rb,bk1.rb,cache.rb,amazon.rb /user/plugin/link_rel.rb,calender.rb,schedule.rb,schedule_z.rb /script/decorate.conf /log/decorate.html /www/diary.css 20031110 /user/filter/amazon.rb,imageserver.rb /sjis/index.cgi 20031227 nDiary0.9.4ベースに移行 /index.cgi optionで年月dirを切ってdiaryを保存,datetime,template /lib/imagesize.rb, /user/lib/open-uri.rb(ruby1.8では不要のはず) /usr/lib/amazon.rb, bk1.rb /user/plugin/calender.rb, monthindex.rb, wytodo.rb /user/filter/inlineimage.rb, rss.rb, enikki.rb 20040104 ruby1.8.0において発生するwarrningの修正(一部試行錯誤中による無関係も有) filter/bookstore_x.rb, amazon.rb, sum_price_x.rb lib/cache.rb lib/amazon.rb(値段を拾わない不具合内包) lib/old_ippo_bk1.rb(bk1の書式が変わったのを追補するもの,lib/bk1.rb相当) plugin/sum_price_x.rb 20040110 formのpassword入力をtextからpasswordに configでの編集可能フォルダ、編集可能拡張子ファイルの設定を追加 configでの保存ファイルの文字コード、改行コードの設定を追加 /index.cgi, config.txt 20040129 listの一覧数の制限,表示は最近が前に来る順に index.cgi, config.txt 設定ファイルconfig.txtを内部の修正で変更できるように CGIでのexitの仕様はerrorになる模様・修正 index.cgi,webframe.rb 20040201 cgiの改行コードをCR+LF(DOS)→LF(UNIX)に変更 index.cgi, script/diary.cgi ruby1.6.7用のscript/ndiary-lib.rbを用意 etc/ndiary-lib.rb 20040202 ↑本家で対応された(ndiary0.9.4.1)ので消去(etc/ndiary-lib.rb) ちょっと修正 script/ndiary-custom.rb 20040204 LATEST_FILENAMEでhttp://〜指定(絶対指定)を可能に セキュリティの為、ファイル保存時にCGI.escapeHTMLを行うoption index.cgi