【Ruby】RubyでCGI
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。
2001/05/04(金) 12:57ID:c4hRtzGY関連リンクは>>2-3
0478nobodyさん
03/12/03 01:48ID:???そういえば、、lib の 1.6だったかを挿してて無理やり1.8をリネームしたのも
>>477 だっけ?
1.6.xのとっ中までcgi.rbがパラメタの=の両端がそろって無いとエラー出す
バグがあったのを思い出したよ。あやしいバイナリ全部作り直せ
0479nobodyさん
03/12/03 13:55ID:???ちなみに僕はそのリネームした人ではないですが、
一応バイナリ make しなおしてみます。
# cvs 最新版で試したりと、もういろいろやってはいるのですが^^;
0480nobodyさん
03/12/04 19:27ID:???0481nobodyさん
03/12/05 19:22ID:???簡単なタイムアウトエラースクリプトを組んだのですが、
require "timeout"
begin
timeout(1) do
loop{}
end
rescue TimeoutError
print "timeout\n"
end
これをシェルから eruby | ruby でやるとちゃんと動作するのに、
CGIで動かそうとするとtimeoutしてくれません。
ちなみにruby1.8.0 eruby-1.0.4です。
よろしくお願いします。
0482nobodyさん
03/12/06 04:31ID:???1行目に
#!/usr/local/bin/ruby18
print の前に
print "content-type: text/plain\r\n\r\n"
を付け加えて481.cgiとして保存して試したら、timeoutって返ってきたよ。
0483nobodyさん
03/12/06 10:09ID:???これでやったけど
#!/usr/local/bin/ruby18
print "content-type: text/plain\r\n\r\n"
require "/usr/local/lib/ruby/1.8/timeout.rb"
begin
timeout(1) do
loop{}
end
rescue TimeoutError
print "timeout\n"
end
駄目ぽ…。タイムアウト反応してくれない…。
0484nobodyさん
03/12/06 15:05ID:???0485nobodyさん
03/12/06 18:31ID:???ん?どういうことですか?
printの出力先をファイルにしても、timeoutが反応してくれないので
無限ループから抜け出せないから見れないんですが…
それとも俺が青二才なのかな…?
0486nobodyさん
03/12/06 20:06ID:???0487nobodyさん
03/12/06 20:52ID:???以下勝手に引用
>一つの ruby のプリミティブで実行してしまうので、スレッド切り替えポイントがないので
>タイムアウトにならない
>Ruby のスレッド切り替えについて、大分誤解してて、SIGALRM が来たら即切り替え、
>だと思っていたら、大抵の場合そうではなく、pending しておいて、切り替えポイントで
> pending が true なら切り替える、みたいなことをしているんだと思う。
関係あるかな?
0488nobodyさん
03/12/07 06:00ID:???CGIとそうじゃないほうで p [RUBY_PLATFORM, RUBY_RELEASE_DATE, RUBY_VERSION]
したら何になるの?
0491nobodyさん
03/12/27 06:11ID:???0492nobodyさん
04/01/06 01:54ID:xw1q3uSMなんでだろう?
0493nobodyさん
04/01/12 02:39ID:???TimeoutErrorやSyntaxErrorだけ察知してくれないのは何が考えられるのでしょう?
0495nobodyさん
04/01/12 11:18ID:???むぅ、読んだけど間違ってない気が…
簡単な例を書くと、
begin
…code
rescue NameError
print "NameError!!"
rescue SyntaxError
print "SyntaxError!!"
end
codeの部分を、
a = 1
print b
とするとちゃんとNameErrorが補足されNameError!!が出力されるのに、
a = 1
print a:
とするとSyntaxErrorの例外処理が適用されず、Ruby側でエラーをキャッチして
強制終了されてしまいます。
ちなみに動かしているのはeRuby1.0.4のデバッグモードなんですが、
それと関係ありますか?
0496nobodyさん
04/01/12 16:58ID:???0498nobodyさん
04/01/18 16:50ID:???0499nobodyさん
04/01/20 20:11ID:???画像として保存し、ブラウザで表示させたいと思っています。
http://psux1.kek.jp/~thitoshi/ruby/
で配布されてたGnuplotクラスを利用して、データをファイルに
保存させ読み込む形式にしたいのですが、
gp = Gnuplot.new
gp.set("term","png color")
gp.set("output","\"graph.png\"")
gp.plot("\"foo.dat\" with lines")
gp.close
ローカルで動かすとちゃんとgraph.pngを生成してくれるのですが、
CGIを通すと動いてくれません。
原因がわかる方いらっしゃいますか?
0501nobodyさん
04/01/20 21:41ID:???あっ、それか!
とりあえずcgi-binディレクトリを777にすると色々うるさく
言われたので、その下に777のtmpディレクトリを作成し、
そこで作業をしたら出来てました!
ありがとうございました(=゚ω゚)ノ
0502nobodyさん
04/02/10 02:03ID:???いいライブラリとかありますか?
0504nobodyさん
04/02/11 21:02ID:???webrickのMLのログも知らなかった。
0507nobodyさん
04/02/24 02:31ID:xNGflriR$ cat ng2.cgi
<%
require 'cgi'
def text; puts "ng2.cgi"; end
class Hoge;def view
text
end;end
%><html>
<BODY>
<%
Hoge.new.view
%>
</BODY></HTML>
$ echo aaa|eruby ng2.cgi
<html>
<BODY>
ng2.cgi
</BODY></HTML>
ちゃんと動くのに
apache,mod-rubyで動かすとエラーになる
[Tue Feb 24 02:27:43 2004] [error] mod_ruby: error in ruby
/tmp/ng2.cgi.17966.0:10:in `view': undefined local variable or method `text' for #<#<Module:0x41744d5c>::Hoge:0x40a41410> (NameError)
from /tmp/ng2.cgi.17966.0:17
from /usr/lib/ruby/1.8/apache/eruby-run.rb:113:in `load'
from /usr/lib/ruby/1.8/apache/eruby-run.rb:113:in `run'
from /usr/lib/ruby/1.8/apache/eruby-run.rb:78:in `handler'
0508nobodyさん
04/02/24 02:40ID:???ruby-1.8.1-0vl6
eruby-1.0.5-0vl1
mod_ruby-1.0.7-0vl1
apache-1.3.29-0vl1
require 'cgi'を外すとか
RubyRequire cgiをつけるとかすると上手く動くけど
なんで〜?Ruby1.6辺りの環境では問題なかったんだけどなぁ
0509nobodyさん
04/02/25 01:34ID:???ものってありますか?
0512nobodyさん
04/02/25 06:29ID:???mod_ruby使ったことないんだけど
textって、mod_ruby下でもほんとにトップレベルにある?
その変な無名モジュールに包まれてるみたいだけど。
0513nobodyさん
04/02/25 16:51ID:???require 'cgi'
cgi.out({'status' => 'NOT_FOUND'})
てなことをすると、
cgi.rb:561:in `out': no block given (LocalJumpError)
と怒られます。
cgi.out({'status' => 'NOT_FOUND'}){}
は
cgi.rb:578:in `out': undefined method `length' for nil (NameError)
です。
cgi.out({'status' => 'NOT_FOUND'}){''}
ならオッケイなんですが、これで正しいの?
ボディはいつも返さないといけないのかな?
0516507
04/02/26 01:23ID:???レスどうも
無名モジュールとかの用語がわからんのでググってみましたが
まだよくわかってないです
http://www.google.co.jp/search?q=ruby+%96%B3%96%BC%83%82%83W%83%85%81%5B%83%8B+%83g%83b%83v%83%8C%83x%83%8B&num=50&hl=ja&ie=Shift_JIS
>トップレベルで定義されたクラスやメソッドなどはObjectの下に定義される代りに、
>その無名モジュールの下に定義されます。
とあるけど???です
1.6の頃とどう変わったんだろう?
ruby-1.6.7-0vl5
eruby-0.9.8-0vl2
mod_ruby-0.9.7-0vl1
apache-1.3.27-0vl3
だと問題ないんだけどなぁ
0517nobodyさん
04/02/26 02:49ID:???Kernel.module_eval {
def text
p "text"
end
module_function :text
}
「トップレベル(に見える場所)で def する癖はやめましょう」が
一番の正解だと思います。main での def は特殊な予感。
0518nobodyさん
04/02/26 10:06ID:???Kernel.module_eval {
def text
p "text"
end
}
0520nobodyさん
04/02/28 08:06ID:???ぐぐった中で見つけてますね。
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/29112
http://slashdot.jp/journal.pl?op=display&uid=7790&id=151929
mod_rubyの仕様のようですが、>>517に同意です。
せっかく名前空間を汚染しないための措置なのに、
むりやり>>518みたいなことを全部のスクリプトでやるのは
気持ち悪いし、後で見たときわけわからなくならない?
0521nobodyさん
04/02/28 08:19ID:???Ruby 1.8.0 に添付されてた yaml なんだけど、
自己参照の多い、ちょっと複雑なArrayとかがまともに保存できなかったので
使うのをyamlことにしたんだけど、新しいのが出てるのかな?
0522nobodyさん
04/02/28 09:13ID:???mod_ruby だと高速化のためにプロセスを使い回すわけだから、
タイミングによっては def text してないスクリプトで text が
呼べてしまう現象が起きてしまうかも。
こういうのは不可解なバグにつながる危険があるから、
本当におすすめできません。
>>521
まともって??
とりあえず 1.8.1 使いましょう。
0524nobodyさん
04/02/28 23:47ID:???CGIスクリプトの一行目は
#!usr/local/bin/rubyでいいのでしょうか?
0525nobodyさん
04/02/29 00:11ID:???なにをどうインストールしたのでしょう?
もし ruby-1.8.1-i386-mswin32.zip を C:\ に展開したのでしたら、
c:\bin\ruby なので #!/bin/ruby になります。
0527507
04/03/02 00:09ID:???あーKernel.module_eval は駄目なんですか
うーん、最初のRubyRequire cgiに戻しました
mainでdefしない、は正直厳しいんです。
1.6->1.8変更の
>Module#include [change]
>トップレベルの include は、第二引数に true を指定した load でロードされるスクリプトのもとでは
>モジュールの機能を self に extend するように変更されました。
ってのが原因?
load(file,true)自体の説明は1.6,1.8とも変わってないんで
0528nobodyさん
04/03/02 00:43ID:???mod_ruby 側でない?
書き換え量が気にならないなら、こうするのがベターです。
module Func
def text
p "text"
end
extend self # おまじない
end
Func.text
0530nobodyさん
04/03/02 10:31ID:???module_function は private と同じで、指定したものだけか、
もしくはそれ以後に def されたものだけ公開します。
それに対して extend self は全て公開します。
関数群の名前空間に使うのならこちらのほうがお手軽です。
0531nobodyさん
04/03/04 02:10ID:???recent_list.rb で表示されるタイトルが
a.rb を使って <%= a %> の形式で書いていると
そのままで変換されません。
どこをどう変えれば良いのでしょうか?
Ruby が全然読めない私にも救いの手を・・・
0532nobodyさん
04/03/04 04:36ID:???0535nobodyさん
04/03/06 17:37ID:C+c5xFRdApache: 1.3.29
mod-ruby: 1.0.7
ruby : 1.6.7(fink)
スクリプト中でアーキテクチャ依存のモジュールをrequireすると
エラーになります。
例えば
#!/sw/bin/ruby
require 'nkf' # for test
require 'cgi'
cgi = CGI::new
cgi.out() {
"<html><body>test</body></html>"
}
をhoge.rbxとして保存してアクセスすると
0536nobodyさん
04/03/06 17:39ID:C+c5xFRd/Users/hoge/Sites/honesty/hoge.rbx:3:in `require': (null) - /sw/lib/ruby/1.6/pow
erpc-darwin6.6/nkf.bundle (LoadError)
from /Users/hoge/Sites/honesty/hoge.rbx:3
from /sw/lib/ruby/1.6/apache/ruby-run.rb:70:in `load'
from /sw/lib/ruby/1.6/apache/ruby-run.rb:70:in `handler'
from ruby:0
と怒られます。
なお、同じスクリプトをhoge.cgiとして保存してCGI経由でアクセスすると
エラーは起こりません。
0537nobodyさん
04/03/06 23:59ID:???mod_ruby の場合は apache ので動くからね。
0538535=536
04/03/07 08:34ID:xKL6fKn7同じ字面のスクリプトがCGIで動くので大丈夫だと思います。
hoge.rbxは755, nkf.bundleは555(ownerはroot)です。
あと、*.rbのモジュールは問題なくrequireできますし、
同じスクリプトをLinuxに持っていっても問題なく動きます。
0540nobodyさん
04/03/12 10:37ID:XHgrIkQVhttp://www.starware.one.pl/software/sws/index.html
http://www.starware.one.pl/software/sws/doc/docbook/index.html
だれか使ってみて。
0542nobodyさん
04/03/12 17:59ID:???EOFにあたるDBライブラリもリンクしときます。
http://www.starware.one.pl/software/sds/
まだ試してはいないんだが、DBライブラリのほうはコンパクトにまとめてあるみたいだね。
SWSと組み合わせて使うのが前提なのかもしれないな。
0543541
04/03/12 19:58ID:???0544nobodyさん
04/03/12 20:34ID:lAf/ivCVくだらないと思った。
Javaじゃないんだからそんなフレームワークとかなんとかってやめようよ。
普通に組むのが一番いいんだよ。
0545nobodyさん
04/03/12 22:17ID:???0546nobodyさん
04/03/12 23:16ID:???それですむ場合も多いとは思うけど、やっぱり仕事とかで大量のページ遷移を
作らなきゃいかんときは、フレームワークあったほうが便利だわな。
究極的には自分用(もしくは会社用)フレームワークを自作すればいいんだが。
0547nobodyさん
04/03/13 07:00ID:???0548nobodyさん
04/03/13 14:52ID:???CGIKIT見りゃ分かるけど、ウェブ用のフレームワークって手間かかるだけで無意味
作るものに合わせて土台を作っていくのが普通だよ あらかじめ作るフレームワークは無駄なだけ
0550nobodyさん
04/03/14 14:14ID:VM4bxA2x過去ログに車輪の再発明とかでてるけど、
Strutsやらなにやらは古タイヤの再利用くらいだとおもう。
ほしい物に似てるけどちょっと違うんだなあ。
だから車体を古タイヤに合わせて設計してみました、みたいな。
似たようなもの毎回作っちゃってもいいんじゃないの?
設計の再利用ってもう流行ってないのかな。
実装なんて再利用しようとても毎回しっくりこないんじゃない?
これ、JBossというかEJBのときにも思った。
既存の道具生かすためになんか本体側で無駄な苦労してるなあと。
0551nobodyさん
04/03/14 17:50ID:???そのあたりはそれこそ、その時々の事情や状況によるものなので、
フレームワークが役立つときもあれば、役立たないときもあるのは当たり前なので、
使う人が勝手にすればいいじゃん。
なので、>>544 よ、君の意見は確かに君にとってはもっともかもしれないが、
「くだらない」かどうかは人によって違うので、他の人に対して「やめよう」と言う必要は
無いんじゃないかな? もちろん、何言おうが君の勝手だけれど。
で、この話は終わりだと思うのだが。
0552nobodyさん
04/03/14 22:44ID:???0553nobodyさん
04/03/15 06:15ID:???EOFの真似というのでかなり興味をそそられるのだが、
この手のもので、どれが一番広まりそうかな。
大きいアプリ作っている人は、皆たいてい「自分用フレームワーク」を持ってると
思うし、この手の共通フレームワークに移行できたら楽かなと思うんだろうけど、
いざ移行するとなると、こいつとなら心中しても悔いなしという決心が要るよなあ。
0554nobodyさん
04/03/15 08:53ID:???J2EE をお手本にしたアプリケーションサーバ( + フレームワーク)。
0555nobodyさん
04/03/15 09:34ID:???EOF って、Enterprise Object Frameworks っていうやつなのかな?
ググってみたけど、あんまり分かりやすく説明しているところが無かったな。
誰か簡単に説明してくれ。もしくは、良いページを紹介してくれ。
0556nobodyさん
04/03/19 14:28ID:???結局作者しか使えないフレームワークになりそう。(数年後にははっきりすると思うけど)
rwikiの実装見ると、drubyでさらっと作ってる印象。
実はこれが正しいエンタープライズなシステムの作り方だと思うよ。
0558nobodyさん
04/03/20 12:47ID:???いちいち手で書くのが好きならいいんだけど、車輪の再発明だもんなあ。
0559nobodyさん
04/03/21 01:38ID:???るびきちさんの言動
0561nobodyさん
04/03/21 14:01ID:???0562nobodyさん
04/03/22 13:17ID:???漏れはウェブシステムのインターフェースとしては一番意味があるフレームワークだと思うんだけど。
(他のフレームワークは申し訳ないけど、手間かかるだけであまり意味がない)
0563nobodyさん
04/03/22 14:35ID:???ドキュメント (チュートリアル的なもの) が見当たんないので手が出せないでいます。
0564nobodyさん
04/03/22 15:20ID:???意味がある、ないを具体的にお願いします。
煽りじゃないよ。何を求めるかによってフレームワークにも合う合わないがあるからさ。
0566nobodyさん
04/03/23 15:16ID:h4hJAwq6rubyでcgiを勉強するのにおすすめの本ってありますか?
今のところ候補としては
・Ruby de CGI オーム社 堀川 久
・RubyによるCGIプログラミング SCC books 三並 慶佐
です。
0567nobodyさん
04/03/23 16:53ID:???どっちも薦めん。tDiary とか読め。
それか、オライリーのCGI本、もしくは Rubyアプリケーション何とか、とか。
それよりも、大学ではどんな風にRubyを教えてるのか、それを教えてくれ。
0568nobodyさん
04/03/23 19:31ID:???0569nobodyさん
04/03/24 04:59ID:???Tofuは使ったことがありますが、RWikiでの説明などで大体わかりました。
Divについては実際に使われているもののソースを読むのはいかがでしょうか。
たとえばdivipとか。
divip - Div IP Messenger
http://divip.sourceforge.jp/
で、divipのMLを読んだらUNIX USERのバックナンバーに
Divの解説記事があるとのこと。
[divip-list:7] UNIX USER2003-09
http://lists.sourceforge.jp/mailman/archives/divip-list/2003-August/000006.html
0570nobodyさん
04/03/24 20:00ID:???dRuby 本は積ん読になってました。読まんと。
divip と UNIX USER もチェックしてみます。
あと、ついでといってはなんですが、
Webrick のドキュメント (チュートリアル的なもの) で良さそうなのありますか?
webrick.org にいくつか使用例がありますが、
フォーム (HTTP POST) を使う例が無いのでそこらへんからつまずいてます。
0572nobodyさん
04/03/29 09:30ID:3mAZfbN2ちょっと勉強してみようと思うんだけど、お薦めの本とかあります?
拙者はC言語が分かる程度です。
0573nobodyさん
04/03/29 14:03ID:JHAif1f9たのしいRuby
0574nobodyさん
04/03/30 02:15ID:???Rubyのソースにある sample/webrick/demo-app.rb とか。
GETとPOSTのサンプルだと思います。
0575nobodyさん
04/03/30 02:40ID:???おおお!ありがとうございます。私の目は節穴でした。
言い訳ですが、FreeBSD の ports で入れると、
こういう Ruby 標準添付になった物のサンプルやドキュメントが
ごっそり無くなってる (インストールされない) んですよね。
まだ標準添付にならずに独立してた頃の方が、
そのへんがインストールされる分、良かった。
0576nobodyさん
04/03/30 03:09ID:???sample/webrick以下のファイルは、1.8.1リリース後に[ruby-list:39029]が
きっかけとなって追加されたみたいです。
http://rrr.jin.gr.jp/rwiki?cmd=view;name=ruby-cvs-2004-01-07#a21.3a22.3a19
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/39029
今後portsのrubyが更新されればこの辺のファイルもインストールされる、
と思います。多分。
■ このスレッドは過去ログ倉庫に格納されています