【Ruby】RubyでCGI
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。
2001/05/04(金) 12:57ID:c4hRtzGY関連リンクは>>2-3
0654nobodyさん
05/01/06 00:27:16ID:???ウェブ用途で使いたい奴の大半は共用鯖で使うこと考えてるわけだしなぁ
0655nobodyさん
05/01/06 00:42:36ID:???0656nobodyさん
05/01/06 19:27:54ID:???ウェブに特化して設計してあるから、仮にあっても汎用的なスクリプト言語としてはまだまだ非力だと思うがなぁ。
0657nobodyさん
05/01/06 20:24:46ID:???あるよ。
ちょこっとテストしたいときとかに、コマンドラインで、
% php hoge.php
みたいに試せるので便利。
ただ、それ単体で実用しようという気にはなれないけど。
0658nobodyさん
05/01/07 22:10:24ID:???CLI(Command Line Interpreter(?))ってのがあって、ソースからコンパイルするとそれが/usr/local/binとかにインストールされる。
それとは別にCGI実行用のコマンドも作れるのだが、コマンドラインからスクリプトを実行しただけで必ずHTTPヘッダが出力されるからいやーん。
Webプログラミングから入った人が簡単なコマンドラインスクリプトを書くには、やっぱりCLI版のPHPがいい。おれはよく使う。
0659656
05/01/08 12:13:44ID:???結構何でもできるとなるとユーザー多いから結構なコミュニティに発展しそうだね。
ピーエイチピーはスルーしない方がいいね。
0660nobodyさん
05/01/08 12:43:12ID:???0661nobodyさん
05/01/08 12:56:05ID:???0662nobodyさん
05/01/08 13:58:42ID:???ところで mob とか perl_mob とかって一体何?
0663nobodyさん
05/01/08 14:12:10ID:???apachのモジュールとして動いてるって事。>mob
0664nobodyさん
05/01/08 14:14:51ID:???0665nobodyさん
05/01/08 14:16:31ID:???moduleでしたな。。
0666nobodyさん
05/01/08 16:15:18ID:???もうちょっとマシなのは ないんすかね。
あ、WEBrick::CGI使うのを想定してます。
0667nobodyさん
05/01/09 09:10:41ID:???Tofuが常道とは思いませんが、他にセッション管理のみを扱うライブラリは
見当たらなかったような。もしくはフレームワーク(CGIKitとかrailsなど)を使うとか。
ところでTofuだと何か問題がありました?
0668nobodyさん
05/01/09 20:50:59ID:???Tofu::sessionクラスを継承したセッションオブジェクトの中に
全てをくるまないといけないので、自前のクラス設計とコンフリクトしそうで嫌なんです。
あとからセッション管理を追加するときに大幅にクラス設計見直す必要がありそうだし。
cgi/sessionみたいに軽くつかえる奴が欲しい。
0669nobodyさん
05/01/10 09:17:19ID:???http://moonrock.jp/~don/ruby/webrick/session.rb
やっつけですが、CGI::Sessionを移植しました。
WEBrick::Session#updateを明示的に呼び出さないと
セッション情報が更新されないという中途半端な状態ですみません。
http://moonrock.jp/~don/ruby/#WEBrick3a3aSession
に動作サンプルもあります。
0671666 = 668
05/01/11 03:03:29ID:???おおー。こういうのが欲しかったんです。
ありがとございますん。
さらに欲をいうと、こいつを、WEBrick::CGIだけじゃなくてServletでも使いたいな、と
思うわけですが、それは無謀?
ファイナライザがそのまま使われているようなので、
そのままじゃ使えないとは思いますが。
0672669
05/01/11 06:42:23ID:???ファイナライザの代わりに、WEBrick::Session#close(またはupdate)を
明示的に呼び出すことでデータを更新できます。
http://moonrock.jp/~don/ruby/#WEBrick3a3aSession
にサンプルを増やしました。
0673nobodyさん
05/01/11 17:22:13ID:lK4o2i8Pセッションって確立しないとどうなるの?
0674nobodyさん
05/01/11 23:05:52ID:???0675nobodyさん
05/01/11 23:21:34ID:???0678nobodyさん
05/01/12 15:16:06ID:???あるHTTPリクエストと、別のHTTPリクエストが、同一のユーザによる一連の操作であるかどうかがわからない。
ただそれだけ。
0679nobodyさん
05/01/12 18:15:05ID:+NFabzw5>>677
>>678
ありがとうです。
ショッピングカートとかならまだしもですが、ただの掲示板には要らなさそうですね・・・。
0680nobodyさん
05/01/12 22:07:09ID:???0681nobodyさん
05/01/12 23:33:50ID:???0683nobodyさん
05/01/13 08:14:30ID:a5QOCrWy一連の操作で使う共通の変数とかもそれ用のログファイル作ってそれに保管しとけばそれらしい挙動しそう。
0684nobodyさん
05/01/13 08:17:05ID:???セッションが必要ならセッションを実現すればよい。
結局、セッションもどきなど必要ない。
0685nobodyさん
05/01/13 08:50:59ID:a5QOCrWy0686nobodyさん
05/01/13 09:15:31ID:???セッションの確立にはリクエストを横断した固有情報があればよく、それはURLに埋め込んでも、
フォームの隠しフィールドに入れても構わない。
ただその場合はHTMLの動的生成能力が必要になる。
0689nobodyさん
05/01/14 17:22:14ID:2UhA1iN00691nobodyさん
05/01/14 17:48:34ID:2UhA1iN00692nobodyさん
05/01/14 18:22:52ID:???0693nobodyさん
05/01/14 18:42:15ID:2UhA1iN0時代は変わったんだし、メモリはケチらず使うことにするよ。
たしかに20年前のマシンのメモリは2キロバイトとかザラだったなあ。
0694nobodyさん
05/01/14 19:05:07ID:???「任意の行だけ」 「その行だけ」ってあたりが
ストリームで順次読み込んで該当行のみ処理して操作みたいなフィルタ的な事が
したいようにみえて CGIで んな事いってもなぁって思っただけw
0695nobodyさん
05/01/14 19:19:05ID:???これでファイルをメモリにmapするとか。
0696nobodyさん
05/01/17 17:17:54ID:LAuXubNJ掲示板とかでログの各行を配列に読み込むより効率的と思ったんだが。
0697nobodyさん
05/01/17 17:20:46ID:???taintできないから
0698nobodyさん
05/01/17 20:20:14ID:???追記するにもファイルの中身全部読んで
要素を追加した上で全部書きださないといけないし
0699nobodyさん
05/01/18 08:04:09ID:azVqGT4+0700nobodyさん
05/01/18 13:42:37ID:???ちと taint っていうのを知らなかったのですが、
AAA でなら Marshal は使えましたよ。
解析を行った結果をシリアライズして保存しておけば、
次読み込む時はスクリプトレベルでの解析を実行しない分高速化できますよ。
掲示板でいうならテンプレート部分とか。
0701nobodyさん
05/01/18 13:52:57ID:???taint できないというのはどういう問題?
たとえばテキストファイルに保存する場合は taint できて Marshal だとできない?
0702nobodyさん
05/01/20 17:28:23ID:???railsでセッション管理をやってみたいと思っています。上の資料だと、
DRb Store かActiveReco Storeがよさげです。
どちらかの実際のコードを示した資料はあるでしょうか?
0703nobodyさん
05/01/21 10:38:11ID:???そのベンチマーク自体はElite Journalを使って行われたものみたいだから、
それのコードを読んでみるとか。
ttp://elitejournal.rubyforge.org/
あと、Rails使った事ないので適当だけど、
RailsのWikiにも参考になりそうページがあるよ。
ttp://wiki.rubyonrails.com/rails/show/HowtoSetupDistributedRuby
ttp://wiki.rubyonrails.com/rails/show/HowtoChangeSessionOptions
で、何か会得したらどこか(RWikiとか?)にまとめてもらえると嬉しいな。
0704nobodyさん
05/01/21 17:06:59ID:???Elite JournalというのはBlogシステムであり、Railsを使って作って
いるんですね。とても参考になりました。EJで調べます。
ありがとうございました。
==================
rails-0.9.4.1だと、EJのINSTALLに書かれている手順では動きませんね。
(No such file to load -- application.rb)
rails-0.8でないといけないかも。
0705nobodyさん
05/01/27 14:23:39ID:D1xpGaFb0706nobodyさん
05/01/27 14:58:51ID:???0707nobodyさん
05/01/27 15:23:08ID:???http://www2.w-shokokai.or.jp/yuasa/kankou/sannsaku/sio/sio.html
0708nobodyさん
05/01/27 16:36:45ID:???http://dev.rakusui.jp/diary/?date=20050124#c03
0709nobodyさん
05/01/28 00:17:00ID:???文字列しかセットできないの?
簡単なコードを書いたけど、うまく渡せたり渡せなかったりです。
1. ShoppingCart.rb
2. @session[:cart] = cart (in controller/application.rb)
3. うまく渡せたり渡せなかったり。。
0710nobodyさん
05/01/28 00:23:23ID:???ほぼ何でも入ります。」とのこと。
(CGIKitを調べはじめていた(^^; 失礼しました。
0711nobodyさん
05/01/29 23:15:15ID:???require "cgi"
cgi = CGI.new
file = cgi.params["file"][0]
で受け取ったファイルを"gazou.jpg"という名前でサーバーに置きたいんだが、
fh = open("gazou.jpg","w")
fh.print file
fh.close
ってやっても、できたgazou.jpgは空っぽ。
なぜだー!
初心者ですまそ。
0713nobodyさん
05/01/30 01:31:36ID:???> file = cgi.params["file"][0]
multipart の場合は、この file は TempFile クラスか StringIO クラスのオブジェクトです。
0714713
05/01/30 01:48:09ID:???0715711
05/01/31 00:34:13ID:???ちゃんと本見てるので、そこは押さえてまつ。
その本には送られてきたテキストファイルの内容をそのまま表示する方法しか載ってなかったもんで。
>>713
fhにfileの内容を出力するのにprintメソッドじゃダメってこと?
0717nobodyさん
05/01/31 02:09:28ID:???CGIパラメータの取得方法は、Ruby1.8系から変わってる。
もしもrubyのバージョンが1.8以降なら、ちょっとリファレンスを読んでみ。
0718nobodyさん
05/01/31 03:08:48ID:???0719711
05/01/31 07:51:50ID:jhetKWRLfile.readってやるのね。
激しくサンクスです。
0720711
05/02/02 07:41:41ID:+oua1U51サーバエラーにはならないけど、.readのあたりでスクリプトが止まります。
バージョンは1.6.8です。
もうcgiライブラリを使う方法はあきらめ、直接ARGF.readで得たバイト列からJPGファイルを生成しようかと考え中。
0721nobodyさん
05/02/02 10:23:32ID:???0722711
05/02/02 18:12:23ID:+oua1U51オープン時に"wb"ってやってますが・・・。
0723721
05/02/02 22:11:33ID:???file = cgi.params["file"][0]
を
file = cgi["file"][0]
に変えて試してみそ。
# それにしても、この辺の仕組みややこしすぎ。
0724711
05/02/04 08:49:40ID:rvzKvXg/params抜いてためしてみましたがやっぱりダメでした。
とほほ・・・
ルビー挫折しそう。
0725nobodyさん
05/02/04 09:05:33ID:???あと考えられるのはHTMLの間違いくらいしか無い……
ここで諦めるなら、無理に押しつけるつもりもないけれど
まだ挑戦する気力があるなら以下のことを書いてくれ。
・readのところで止まるとき、どんなエラーが出るか
・現時点でのソースコードはどうなっているか
・フォームを生成するHTMLはどうなっているか
0726nobodyさん
05/02/04 19:00:38ID:???部分的にでもコード晒せばいいのでは?
あとその昔のサンプルコードだけど今でも有効なはず。
ttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/25399
降ってくるのはMIMEヘッダが付いたバイナリ列であり、POSTのデータは普通のCGIなら(mod-rubyは知らん)
標準入力から来るから、こんなんで
#!/usr/local/bin/ruby
print "Content-type: text/plain\n\n";
print ARGF.readlines.join
こんなの
-----------------------------20164375627006
Content-Disposition: form-data; name="filename"; filename="nspr4.dll"
Content-Type: application/x-msdownload
MZ……
が見えないならどっかおかしい。
0727726
05/02/04 19:01:51ID:???<html>
<head>
<title>upload</title>
</head>
<body>
<form action="/cgi-bin/print.rb" method="post" enctype="multipart/form-data">
<input type="file" name="filename" size="32" maxlength="256"></input>
<input type="submit" value="submit">
</form>
</body></html>
0729728
05/02/04 19:32:50ID:???0730711
05/02/05 09:18:52ID:???今現在は、こんな感じです。
#!/usr/local/bin/ruby
print "Content-type: text/html\n\n"
require "cgi"
cgi = CGI.new
file = cgi["file"][0]
fh = open("test.jpg","wb")
fh.write file.read
fh.close
print <<EOF
<html><head><title>test</title></head><body>
<img src="test.jpg" alt="test"><br>
<form action="test.cgi" method="post" enctype="multipart/form-data">
<input type="file" name="file" size="70">
<input type="submit" value="upload">
</form></body></html>
EOF
0731711
05/02/05 09:24:19ID:???で、ブラウザが真っ白な画面を出力して終わります。
なぜか.readをはずすとHTML出力まで行ってくれますが、
そのフォームを利用してファイルを送信するとまた真っ白な画面になります。
>>726
print ARGF.readではちゃんとそんなのが出てきます。
それを使えばjpgファイルへのデコードも可能ではないかと考えました。
みんな親切(涙)
0732nobodyさん
05/02/05 11:17:52ID:???おそらくは、パラメータに値(ファイル)が入っているかどうかを判定していないのが原因。
つまり、最初にCGIを呼び出したときには
file = cgi["file"][0]には空文字列しか入っていなくて
その空文字列に対してreadを送ったために、エラーで出力が止まった。
標準出力と標準エラー出力を、適当なテキストファイルに設定して確かめてみるといいかも。
$stdout = open('./output.txt', 'w')
$stderr = open('./error.txt' , 'w')
0733nobodyさん
05/02/05 15:52:29ID:???一緒にせずにUP用のHTMLファイルと受け付け用のスクリプトファイルにするのが普通だろ。
切り分けができないとテストにならないじゃないか。
0734nobodyさん
05/02/05 16:07:42ID:???cgi = CGI.new
file = cgi["file"]
if file.respond_to?(:read)
fh = open("test.jpg","wb")
fh.write file.read
fh.close
end
# やっぱり cgi.rb は捨てた方が・・・
0737nobodyさん
05/02/05 21:41:39ID:???0739nobodyさん
05/02/05 23:34:56ID:???自分用のcgi.rbラッパーを作った方が良い。
コア部分は歴史を重ねて、それなりに堅牢に出来てるんだから
そのまま捨ててしまうのはもったいない希ガス。
0740nobodyさん
05/02/06 00:36:37ID:???0741nobodyさん
05/02/06 10:05:55ID:???その方法だと、ファイルを送りたいときが問題になる。
……と思ってたら、ファイルを送ってもちゃんとparamsで受け取れるのか。
さっそくリファレンスマニュアルに書いてこよう。
0742711
05/02/06 11:03:41ID:???HTML部とCGI部とを切り分け、CGI部にbegin〜rescue〜endを入れてエラーの内容を出力させたところ、
RuntimeError
cannot generate tempfile `/tmp/CGI2732.9'
C:/usr/local/lib/ruby/1.6/tempfile.rb:46:in `initialize'
C:/usr/local/lib/ruby/1.6/cgi.rb:805:in `new'
C:/usr/local/lib/ruby/1.6/cgi.rb:805:in `read_multipart'
C:/usr/local/lib/ruby/1.6/cgi.rb:918:in `initialize_query'
C:/usr/local/lib/ruby/1.6/cgi.rb:1916:in `initialize'
C:/homepage/public_html/test.cgi:7:in `new'
C:/homepage/public_html/test.cgi:7
と出てきました。
test.cgiの7行目はなんと"cgi = CGI.new"文。
これってひょっとしてバグ・・・?
0743nobodyさん
05/02/06 11:30:17ID:???> cannot generate tempfile `/tmp/CGI2732.9'
Windowsで使うことを考慮してないみたいですね>cgi.rb
0744nobodyさん
05/02/06 11:52:16ID:???そこまでくると、今度こそrubyインタープリタの問題か……。
mswin版の1.6.8で試してみることをお薦めします。
ちなみに俺の環境では、mswin版1.6.8(正式版)を An HTTP Daemonで走らせている。
0745711
05/02/06 12:42:46ID:???0746nobodyさん
05/02/06 19:21:18ID:???CGIじゃなくて、tempdir.rbの仕様。
def initialize(basename, tmpdir=ENV['TMPDIR']||ENV['TMP']||ENV['TEMP']||'/tmp')
ソース見りゃわかるが、上記なので環境変数TMPDIR,TMP,TEMPと見ていって、無ければ/tmpが採用される。
なので環境変数で適当な存在するディレクトリを指定すべし。
0747711
05/02/06 23:58:49ID:???で、できましたーーーーーーーーーーーーー!!!!!!
/tmpがないんだったら/tmpを作っちゃえばということで、
c:\にtmpっていうフォルダ作ったら解決しちゃいました!
みなさん親切にどうもありがとうございました!
0748nobodyさん
05/02/07 14:00:14ID:???環境変数をいじっているかそれとも An HTTP Daemon がうまいことやってくれてるの?
0749711
05/02/07 14:31:14ID:???レンタルサーバのルートにtmpディレクトリがなかったらアウト。
さすがにレンタルサーバの環境変数とかをスクリプトでいじったら怒られるよな・・・orz
0750nobodyさん
05/02/07 14:34:54ID:???0751nobodyさん
05/02/07 15:07:32ID:???ていうか711は2chで人に聞いて場当たり的に解決しようとする前に、
本などでもっと体系的に勉強した方がいいですね。
環境変数とかの理解が間違ってるよ。
0753nobodyさん
05/02/07 16:32:58ID:???C:\tmp つくるよなーふつー (´ー`)y─┛~~
■ このスレッドは過去ログ倉庫に格納されています