RubyでしょぼいCGIつくってみたんですけど・・・

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
2ちゃんねるのそれぞれの板で、どんなスレがあがっているか
つまり、ヘッドラインみたいなものを表示するスクリプトなんですが
原因不明のバグに陥ってしまってどうすればいいのかさっぱりわからない状態です。

コマンドラインからなら正常に動作するのですが、サーバーにアップしてみると
インターナルサーバーエラーとなってしまいます。

http://211.125.64.135/
正常に動作した場合はこのようなhtmlファイルを返すはずなんです・・・

http://211.125.64.135/getsub.txt これがソースファイル
http://211.125.64.135/index.txt これがcgiにリクエストをだすhtmlファイルです

Rubyに詳しい方や興味がある方、できればどこが間違っているのか教えてくださいませんか
2デフォルトの名無しさん:01/09/21 11:12
#!〜が書いてないとか?
3:01/09/21 11:13
http://211.125.64.135/index2.html
こんな風に複数の板も表示できるはずなんですが・・・

サーバー上で動かないんです
オブジェクト指向スクリプト言語Ruby part2
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=987231068

へ以降しましょう。
5ラウンジャー:01/09/21 11:15
おっ来たねぇ。
がんがれよ。おまえには才能がある。
6:01/09/21 11:15
>>2
それも試したんですけど、どうもうまくいかないようです
7デフォルトの名無しさん:01/09/21 11:17
実行パーミッションにしてないとか?
8:01/09/21 11:18
>>4
死んだスレに質問してもちょっと・・・
ウザイのは十分承知ですが、ここで続けさせてください

>>5
昨日のスレみてくれてた人ですか?
実はあれから徹夜で改良してたんです
でもバグって・・・
9デフォルトの名無しさん:01/09/21 11:19
死んだスレでもないだろ。最終書きこみ昨日だし
10デフォルトの名無しさん:01/09/21 11:20
>>7
色々試したんですが、設定の問題ではなさそうです・・
11デフォルトの名無しさん:01/09/21 11:22
HTTPヘッダを送ってないとか?
12:01/09/21 11:23
>>9
プログラマー板のすれと勘違いしてました。すいません

>>11
詳しく教えてください。ヘッダの送り方とは?
13デフォルトの名無しさん:01/09/21 11:26
print "Content-type: text/html\n\n"
14:01/09/21 11:34
>>13
できました!!
ありがとうございます!!

http://211.125.64.135/index.html
一応完成形です

あとは、ファイルロックとかその辺が出来れば・・・
15ラウンジャー:01/09/21 11:36
>>14
やたー!おめでとう。
しかもヘッダの間違いだったのかよ!ワラタ。。
完成したらひろゆきにメールして2チャンネルにリンクしてもらいなよ。
きっとOKだと思うぞ。
16:01/09/21 11:42
>>15
わーい!うれしいな
ここで相談するの怖かったけど、来て本当によかったよ
ありがとね

ラウンジでも宣伝したから今アクセス来まくり
サーバー落ちそう
17:01/09/21 11:51
ついでと言っちゃあなんですが、ソースレビューしてくれる人いませんか?
全て独学で進めてるからどんなコード書けばいいのかよくわかんないんです
自由に改造・再配布してくれて結構なんで、ここを直せ!とかこんなくそな書き方するな!とか
アドバイスください

http://211.125.64.135/getsub.txt
18デフォルトの名無しさん:01/09/21 11:56
13によりネタ(宣伝)と断定させていただきます。
19:01/09/21 12:03
>>18
ネタでも何でもいいよ!
プログラム板の人ありがとね
20:01/09/21 16:56
対応スレを大幅に拡大してリニューアルしました
感想聞かせてください

http://211.125.64.190/index.html
ここにアクセスしてみてください

ソースや掲示板のリストはここです
http://211.125.64.190/getsub.txt
http://211.125.64.190/namae.txt
http://211.125.64.190/server.txt
21:01/09/21 17:07
あれ?
放置?
CGIってのがねえ。
自分ならheadline.html生成するスクリプトをcronでまわす。
それと、 SocketError, Errno::ETIMEDOUT 例外くらいは拾っておいてくれ。
23:01/09/21 17:49
>>22
おお!
貴重な助言ありがとうございます。

でも、自分はwin厨なんでcronまわせないっす
ソケットのエラーは戻り値をチェックすればいいんでしょうか?
例外処理はまだ勉強してないからやっときます
24:01/09/21 19:03
http://nmgm.s2.xrea.com/
サーバ借りてアップしてみました
25ルビ厨な人:01/09/22 23:24
>>1
俺がRubyでCGI作るときに参考にしたページを教えとくよ。
ttp://www.rubycgi.org/
ttp://www.asahi-net.or.jp/~fz9h-tkuc/ruby/cgi/rubycgi.html
もう、知っているかもしれんがな、、、
あと、indexはcgiにしてCookie付けてあると便利かも。
その時は、チェックをクリアする機能も付けて欲しいな。
つか、ソースを参考に見たいんだが、、、アップしてないの?
26:01/09/23 12:49
>>25
アドバイスありがとうございます
いやいや、参考になるサイトですね。知りませんでしたよ

それと、ソースは公開してますよん
http://nmgm.s2.xrea.com/getsub2.zip
http://nmgm.s2.xrea.com/imode.zip

上が、http://nmgm.s2.xrea.com/index.htm のソース
下が、http://nmgm.s2.xrea.com/i/imode.xcgのソース
自由に使用・改造・再配布してもらって結構です

いろいろな所で宣伝したら結構評判(・∀・)イイ!! みたいです
昨日一日で3000アクセスあったし

                 
――――――――――――――――――――――
番組の途中ですが、臨時ニュースです。
「Rubyはクソです。ゴミ箱逝きです。 いじょ 」
この発言をコピペしていただければ幸いです。
___________   __________
             ‖ \|________   
             ‖ | ON AIR.|
             ‖  ̄ ̄ ̄ ̄
        ./ ̄ ̄θ Λ_Λ
      .../   //(´∀` )/|
     ./      ̄/⊂    ||_/
     | ̄ ̄ ̄ ̄ ̄|  (  ━┳┛
     |_____| /ヽ」┘┻
――――――――――――――――――――――
番組の途中ですが、臨時ニュースです。
「Rubyはクソです。ゴミ箱逝きです。 いじょ 」
この発言をコピペしていただければ幸いです。
___________   __________
             ‖ \|________  
             ‖ | ON AIR.|
             ‖  ̄ ̄ ̄ ̄
        ./ ̄ ̄θ  Λ_∧
      .../   //(´∀` )/|
     ./      ̄/⊂    ||_/
     | ̄ ̄ ̄ ̄ ̄|  (  ━┳┛
     |_____| /ヽ」┘┻
――――――――――――――――――――――
番組の途中ですが、臨時ニュースです。
「Rubyはクソです。ゴミ箱逝きです。 いじょ 」
この発言をコピペしていただければ幸いです。
___________   __________
             ‖ \|________  
             ‖ | ON AIR.|
             ‖  ̄ ̄ ̄ ̄
        ./ ̄ ̄θ  ∧_∧
      .../   //(´∀` )/|
     ./      ̄/⊂    ||_/
     | ̄ ̄ ̄ ̄ ̄|  (  ━┳┛
     |_____| /ヽ」┘┻
↑なんでこの人はRubyが嫌いなのか?
知ってる人おせーて。
31ルビ厨な人:01/09/24 03:06
>>1
Oui. ソース、確かにありました。
それに、お役に立ててもらって嬉しいです。
何か気づいた点があれば、またカキコします、、、
>>30
僕の推測ですが、次のような人たちであると思われます。
1.Rubyがわからない、というよりオブジェクト指向を理解できなく、Rubyが使えないので、その八つ当たりする勘違いな人。
2.Rubyの驚異を恐れるPerl信者。
3.ルビ厨のうざさに苛ついているが、プログラムを組んだことも無い板違いな人。
4.よくわからんが、とりあえず煽っとけとがんばる厨房。
こんな感じではないでしょうか?
一部、Rubyの弱点(遅いとか、Ruby使えるCGIサーバが少ないとか、その他にも僕はあまりよくわからないがあるらしい、、)に嫌気がさして、Rubyを批判をしている人もいますが、そのような人たちはちゃんとした理由を書いて、無意味なコピペなんかしてないみたいです。
>>31
2chに意味のある批判を期待してモナー
33デフォルトの名無しさん:01/09/30 15:23
こっちもageよう。
メルマガで紹介されてたよ。
34デフォルトの名無しさん:01/09/30 16:46
Rubyの驚異ってなんですか?(・ x ・)
35ルビ厨な人:01/09/30 16:53
>>34
>Rubyの驚異ってなんですか?(・ x ・)
んなものないよ、、、
Rubyが盛んになったとしても、それとPerlが落ちぶれるかはまた別の話だし、、、
まあ、コピペする人は変な強迫観念に陥っていると思われ
まあ、Rubyがおそいって言っても、Javaよりは速いから実用になるでしょ
37デフォルトの名無しさん:01/09/30 17:33
>まあ、Rubyがおそいって言っても、Javaよりは速いから実用になるでしょ
すごい理論だね(笑)
今度、Javaが遅いって言う人には
こういう言い訳をすればいいんだ

>>31
日本人が作ったということで興味がわき
Rubyを作った人の本を読んだのですが
やはり、C,C++,Javaプログラマーから見ると
小規模なプログラムしか作れない言語だと見られてしまうはずです
一方、CGIのような使い捨てスクリプトを作る人にとっては
最初からツールがそろっていて便利だと感じるでしょう
たしか、あの本では何桁の数でも変数に保存できる
という事を説明していましたが、
c,c++,javaで作るような大規模プログラムでは
処理の種類によって、何桁の数でも保存できるデータ構造の仕組みを
変えます
ハッシュもキューもスッタクもリストも全部そうです
この変数(データ構造)を、Javaならばインターフェースでラップし
ポリモーフィズムで使うこともできますし、改良するのも楽です
オブジェクト指向はこのように使うのだと理解している人間にとって
Rubyのオブジェクト指向はいまいちなのです
書きやすさという点では
文字列処理はPerl,Rubyともに便利ですね
CGIには、もってこいの言語だと思います
そして、やはり新しいだけあってRubyの方が断然優れていると
個人的には感じます
>>37
スケーラビリティが必要なプログラムが世の中どれだけあるかだな。
例えば基幹システムをスクリプト言語*だけ*で作ろうとは思わないし作れるとも思わないが、
テキスト処理部分など一部に使うのは十分に有効だろう。
小規模なプログラムの組み合わせで大きなプログラムが作れる(と俺は思っている)。
適所適材ということだ。

個人的に Ruby でプロトタイプを作成して Java で実装をやってみたが、
UnitTest をきちんとやれば Java だけで十分だと感じた。
ま、結構そのままコードを移せることが分かったのは収穫だった。
(XML の DOM ツリーの diff を取るというだけのプログラム)
補足
>十分に有効だろう。
というのは、基本的なデータ構造でも
自作のものを十分に robust かどうかテストするのは結構大変だから。
使えるものは何でも使ってできる限り手抜きしたいのよ。
>>37-39
はいはい、板違いだから向こうに行ってね。
41デフォルトの名無しさん:01/09/30 18:07
>使えるものは何でも使ってできる限り手抜きしたいのよ。
ここが意識の違いだよね
そんなこといったら、アルゴリズムとかデータ構造って
意味ないじゃん
42デフォルトの名無しさん:01/09/30 18:42
ひろゆきのメルマガで紹介されたね!
おめでとう>作者

さてさて、昔の2chユーザーは知ってるとおもうんですが、
昔はヘッドラインってのがあったんですよ。。
いろんな掲示板のスレッドtop20とかが、
わちゃわちゃと見れるページですね。
ただ、サーバ負荷が高いので現在ははずしてたりしてたんですが、
ヘッドラインを公開してる方がいるので、
紹介してみますです。

「2ちゃんねるヘッドライン 」
http://nmgm.s2.xrea.com/2ch.htm

このページにいって、見たい掲示板をチェックして「送信」ってボタンを
押せば表示されるですよ。

ソースも公開されてるそうなので、自分で置きたい人は
置いてみてくださいですー。負荷分散になるしね。
http://nmgm.s2.xrea.com/getsub2.zip

ただrubyなんで、無料でおけるところは、、、あるのかな?
フリーのrubyサーバってあるのかなぁ、、
知ってたら教えてくださいー。
44デフォルトの名無しさん:01/09/30 18:48
perlだったら俺の鯖においたのになぁ。。。
45デフォルトの名無しさん:01/09/30 18:53
クッキーで利用者ごとのヘッドラインを保存してくれると便利になると思う
既出かしら
46:01/10/01 04:50
>>33>>42
あんがと
このスレのこと覚えていてくれたのね
ひろゆき氏のおかげでサーバーが落ちるほどの大反響でした
これからも使ってくださいな

>>44
最初はperlで書いてたんですが、ソケット周りのクラスの振る舞い
というか、perlのオブジェクトが死ぬほど使いにくかったからrubyに変更しました
そしたらもう、すんなり書けて感動したね

>>45
JavaScriptやったことないからクッキーの扱い方わかんねっす
↓こんなのをブラウザのお気に入り登録しておいて何とかしのいでください
http://nmgm.s2.xrea.com/x/getsub2.cgi?bbs=tech?bbs=php
47:01/10/01 04:51
間違えちった
お気に入り登録はこうね
http://nmgm.s2.xrea.com/x/getsub2.cgi?bbs=kao&bbs=phhp
48デフォルトの名無しさん:01/10/01 05:18
あ!作者さんだ
ありがとう、便利に使わせてもらてます
49:01/10/01 06:31
>>48
どうもね

なんか最初に板を立てた頃とは明らかに反応が違うね(笑
恐るべしひろゆきの影響力
50名無しさん:01/10/01 07:32
CGIでもクッキーは使えるよ
51:01/10/01 07:51
>>50
見てくれたらわかると思うけど
この2ちゃんねるヘッドラインは、
掲示板を選んでCGIにリクエストを渡す部分と
リクエストを受け取ってヘッドラインを出力するCGIの部分から出来てるんだよ

利用者ごとに設定を変えるとなると、前者にクッキーを発行させるのが普通だと思うんだけど
これは静的なHTMLで書いちゃったから、もうJavaScriptでやるしかないと

という話です
52名無しさん:01/10/01 08:14
んーとそうかな?

getsub.cgiっていうのがフォームからのPOSTで入力を受け取ると、クッキーを要求しつつ結果を出力する。
そこでユーザはgetsub.cgiをブックマークする。
で、次にブックマークからGETでgetsub.cgiが呼ばれたときにクッキーがあるようなら
それを元にHTMLをつくる、でいけるんじゃないの?勘違いだったのかな。
53:01/10/01 08:25
>>52
うーん、どうだろ?
それでいいのかな
暇が出来たらやってみるよ
Rubyはいいんだけど、Ruby使える無料鯖ってないよね
55ルビ厨な人:01/10/01 19:01
>>54
XREAがあるよ。
つか、>>1がすでに使っているじゃん、、、
メルマガでひろゆきも気づいてなかったみたいだけど、、、
56:01/10/02 09:16
>>52
クッキーめんどくさいからブックマーク作成スクリプト組みました
>>47みたいなのを作る奴
57:01/10/04 22:49
http://nmgm.s2.xrea.com/Eboard.zip
こんどはDelphiでしょぼいアプリ作ってみたんですけど・・・
良かったら使ってみてください
仕事中に2chしてる人にはいいかも
58:01/10/04 22:51
とりあえずラウンジとニュー速とネットウォッチが選べます
この辺はまだ作りかけなんで我慢してください。
Delphiのはいいよ。
Rubyでもっと作ってくだされ〜
60:01/10/04 23:02
へ?apolloで作れって事?
61:01/10/05 17:06
大幅に改良
TWebBrowser使ってみました
「常に前」をいじるとエラーが出るんでさわらないで下さい
62デフォルトの名無しさん
if bbs.length == 0 #引数チェック
の前に

# cookie対応
bbs = cgi[ 'bbs' ]
if bbs.empty?
bbs = cgi.cookies[ 'bbs' ]
end
cookie = CGI::Cookie.new('name'=>'bbs','value'=>bbs,
'expires'=>Time.now+60*60*24*30).to_s
puts "Set-Cookie: #{cookie}"
unless bbs.empty?
logstr << "cookie: #{cookie}\n"
end

を入れてここより後のcgi[ 'bbs' ]をbbsに全部変えればいい。

if bbs.length == 0 # こんな感じ。