トップページphp
982コメント335KB

【Ruby】RubyでCGI

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。2001/05/04(金) 12:57ID:c4hRtzGY
Rubyについて語るスレッドです。
関連リンクは>>2-3
0622MoonWolf ◆BwMoonWLvE 04/10/18 21:46:47ID:???
>>621
ソースをアップしてくれたらアドバイス出来るかもしれない。
普通はLocationヘッダを吐くか、<meta http-equiv="Refresh" content="10;URL=http://example.com/">
みたいなHTML吐いてリダイレクトさせる。
0623nobodyさん04/10/18 22:01:58ID:MFPrIGvP
>>622
CGIKitの場合は
response.set_redirect(飛び先のURL)
ですよ。

ちなみにファイルアップロードの時って違いあるんだっけ?
0624nobodyさん04/10/19 01:06:57ID:???
MoonWolfさん、623さん、ありがとうございました。
お答えいただいた内容をもとに解決することができました。

0625nobodyさん04/11/11 16:59:35ID:???
CGIKitとSWSを比べてるんだが、
CGIKitはWebObjects風に<CGIKIT>タグをtemplateに埋め込むが、
SWSは通常のHTMLタグにsws属性で指示を埋め込めるらしい(Tapestry風か)。

通常タグの方が、templateのデザインにHTMLエディタが使えていいんだが、
CGIKitとしては「プリプロセッサでやってくれ」という立場のようだ。
http://www.freeml.com/message/cgikit@freeml.com/0000480

というわけで、SWSの方が筋が良さそうなんだが、誰か使ってる奴いる?
0626nobodyさん04/11/11 23:34:30ID:???
>625
やっぱりTemplateEngineは自作でしょ
0627nobodyさん04/11/12 11:58:22ID:???
いろんな用途に使える車輪はないのか
0628nobodyさん04/11/12 23:41:20ID:???
NoraのWeb::Templateがるびまに簡単なチュートリアル載ってて
割と簡単だったので今書いてるプログラムに使う予定。

ruby-listのがちょっとアレだけど、まあ。
0629nobodyさん04/11/13 01:24:13ID:a20D0PWx
昔どこかのサイトでテンプレートエンジンの速度の比較データを見たことがあるんだけど検索してもみつからない。
どこのサイトか誰か知りませんか?
0630nobodyさん04/11/14 23:15:48ID:???
>>617
最初っから rubyでcgi書いてるやつそんなにいないから。
0631nobodyさん04/11/22 04:45:41ID:???
今日,mod_ruby1.2.4を導入してみたのですが.
print "content-type: text/html\r\n\r\n"
# htmlをプリント
のようなcgiがまともに動きます.

ttp://arika.org/doc/debuan.mod_ruby.html.ja
ここを見る限り,
print "HTTP/1.1 200 OK\r\n"
などを書いてからじゃないと駄目くさいですが,
これはmod_rubyが使われていないって事でしょうか…?
0632nobodyさん04/11/22 06:06:28ID:???
自己解決しました.
サンプルのhttpd.confのままだと/rubyにrubyスクリプト置かなきゃ駄目なんですね…
恥ずかしい…
0633nobodyさん04/12/09 01:38:09ID:???
SWS 使ってみたいが、日本語の情報なさすぎ。
0634nobodyさん04/12/11 01:20:49ID:???
影舞入れてみた。
ちょっと感動した。
っても、BTS使おうよ!!とこれから会社の連中に頼み込まねばならんのだがorz

# どうせならDB、Firebirdにも対応させたいなぁ
0635nobodyさん04/12/11 09:19:02ID:???
影舞でToDoの管理を始めてみた。
なかなか便利だ。
っても、おれのToDoがバグ呼ばわりされてしまうのがorz

# 最初の報告者の表示を消したいなぁ
0636nobodyさん04/12/15 22:22:22ID:GHNVBmM1
PerlとRuby両方で掲示板作りに挑戦してみたけど、趣味でやるならRubyの方が楽な気がします。
30歳を超えたサラリーマンの日曜プログラマは作りかけのスクリプトを一ヶ月ぶりに開くなんてザラ。
この歳になると記憶力も相当に落ちているので、コードが読みやすいことは切にありがたいのです。
0637nobodyさん04/12/31 22:25:51ID:???
それではみなさんよいお年を。
来年はCGIクラスが使いやすくならないかな。
063863704/12/31 22:35:02ID:???
>>637
などと思っていたら……

RAA - cgi_adjuster
http://raa.ruby-lang.org/project/cgi_adjuster/

というのがありました。

http://www.nslabs.jp/rubycgi-18compat.rhtmlを読むと「とぼけた失敗」
「Ruby 1.8.1でもRuby 1.8.0と非互換な変更が入っている(ふざけているの?)」
などと、そうとうお怒りのご様子。
0639nobodyさん04/12/31 23:46:34ID:???
はたしてrubyはアプリケーションの基盤として使用に耐えうる言語なのかどうか。
これは開発者のメンタリティの問題だが。
0640nobodyさん05/01/01 00:46:57ID:???
cgi.rb の仕様が間違っていたのは火を見るより明らかなのに、
いつまでも cgi.rb なんか使い続けてる方が間違いでしょう。
0641nobodyさん05/01/01 14:50:38ID:???
Rubyの標準添付以外に、まともなCGIライブラリ実装ってあるん?
標準添付のがまともだと言う気はさらさらないが。
0642nobodyさん05/01/01 18:47:11ID:???
今熱いのはRuby on Railsだな。
0643nobodyさん05/01/01 21:09:57ID:???
Nora かな。

とか言うと荒れそうなのでやめとく。
0644nobodyさん05/01/02 06:43:52ID:???
WEBrick::CGIはどうよ? 既に標準添付されているし、
WEBrickのServletとしてもすぐに使えるように作れるし。
0645nobodyさん05/01/02 15:28:22ID:???
>644
え、標準添付? ……うぉっ、ほんまや。
たまにはmake installしたあとlib以下ものぞいてみるもんですなorz
つらつら眺めてみるです。さんくー
0646nobodyさん05/01/03 09:59:01ID:???
ここにも貧弱なRubyドキュメントの弊害が
0647nobodyさん05/01/03 15:10:16ID:???
リファレンスには徐々にドキュメントが増えているので、
1.8.3が出る事には改善されていると思いますよ。
……などと他人事のように書いているのが間違いなのか。
0648nobodyさん05/01/04 08:17:56ID:Y50UuVB0
cgi.rbよく使ってるけど、どのへんの仕様が間違ってるの?
他に乗り換えなきゃいけないくらい深刻?
0649nobodyさん05/01/05 00:21:46ID:???
phpに対するrubyの優位点ってありますか?
あるとしたらどんな点ですか?
0650nobodyさん05/01/05 01:27:35ID:???
>648
638で出てる辺りは結構イヤソな気も。
065164805/01/05 07:58:47ID:ZQKhbklS
なるほど互換性の問題ね。
たしかにそれはある。


>>649
CGIがRubyの書式で気持ちよく書けることでしょ。
またいったん覚えたらRubyの方がいろいろと他の用途にもつぶしがきく。

でもウェブ技術に限定すれば、ユーザーも多く高速なうえサーバー負担も軽いときているPHPには到底及ばん罠。
0652nobodyさん05/01/05 15:29:45ID:???
PHPって高速なん?
0653nobodyさん05/01/05 22:26:57ID:???
>652
PHP使うときは99%mod_phpで動かすからなぁ。
mod_perlやmod_ruby使えば……むー、どうなんだろう? いいベンチの取り方ないかなぁ。
(っても、まずmod_php、mod_ruby(とついでにmod_perl)使えるようにして
各言語でカリカリにチューニングしたコード書かなきゃならんよなぁ。マンドクセ)
0654nobodyさん05/01/06 00:27:16ID:???
ただmod_rubyは専用鯖か自宅鯖限定になっちゃうからな・・

ウェブ用途で使いたい奴の大半は共用鯖で使うこと考えてるわけだしなぁ
0655nobodyさん05/01/06 00:42:36ID:???
なんでphpってmobで動いてるのが多いの?
0656nobodyさん05/01/06 19:27:54ID:???
てゆうか、サーバーのモジュールでないピーエイチピーインタプリタなんてあるの?

ウェブに特化して設計してあるから、仮にあっても汎用的なスクリプト言語としてはまだまだ非力だと思うがなぁ。
0657nobodyさん05/01/06 20:24:46ID:???
>>656
あるよ。
ちょこっとテストしたいときとかに、コマンドラインで、
% php hoge.php
みたいに試せるので便利。
ただ、それ単体で実用しようという気にはなれないけど。
0658nobodyさん05/01/07 22:10:24ID:???
>>656
CLI(Command Line Interpreter(?))ってのがあって、ソースからコンパイルするとそれが/usr/local/binとかにインストールされる。
それとは別にCGI実行用のコマンドも作れるのだが、コマンドラインからスクリプトを実行しただけで必ずHTTPヘッダが出力されるからいやーん。

Webプログラミングから入った人が簡単なコマンドラインスクリプトを書くには、やっぱりCLI版のPHPがいい。おれはよく使う。
065965605/01/08 12:13:44ID:???
へえー。
結構何でもできるとなるとユーザー多いから結構なコミュニティに発展しそうだね。
ピーエイチピーはスルーしない方がいいね。
0660nobodyさん05/01/08 12:43:12ID:???
素直にperlで書け
0661nobodyさん05/01/08 12:56:05ID:???
だってperl_mob入ってるサーバ少ないんだもん。
0662nobodyさん05/01/08 13:58:42ID:???
perl_mob とかいわれると LYNCH MOB とかを連想してしまう。

ところで mob とか perl_mob とかって一体何?
0663nobodyさん05/01/08 14:12:10ID:???
mob_perlだった、スマソ。
apachのモジュールとして動いてるって事。>mob
0664nobodyさん05/01/08 14:14:51ID:???
英語って似たような字が多くて難しいよな。
0665nobodyさん05/01/08 14:16:31ID:???
ごめんね、本当にごめんなさいorz 顔から火が出るほど恥ずかしいです。
moduleでしたな。。
0666nobodyさん05/01/08 16:15:18ID:???
WEBrickでのセッション管理にはTofuを使うのが常道?
もうちょっとマシなのは ないんすかね。
あ、WEBrick::CGI使うのを想定してます。
0667nobodyさん05/01/09 09:10:41ID:???
>>666
Tofuが常道とは思いませんが、他にセッション管理のみを扱うライブラリは
見当たらなかったような。もしくはフレームワーク(CGIKitとかrailsなど)を使うとか。

ところでTofuだと何か問題がありました?
0668nobodyさん05/01/09 20:50:59ID:???
Tofuを使うと、
Tofu::sessionクラスを継承したセッションオブジェクトの中に
全てをくるまないといけないので、自前のクラス設計とコンフリクトしそうで嫌なんです。
あとからセッション管理を追加するときに大幅にクラス設計見直す必要がありそうだし。
cgi/sessionみたいに軽くつかえる奴が欲しい。
0669nobodyさん05/01/10 09:17:19ID:???
>>668
http://moonrock.jp/~don/ruby/webrick/session.rb
やっつけですが、CGI::Sessionを移植しました。
WEBrick::Session#updateを明示的に呼び出さないと
セッション情報が更新されないという中途半端な状態ですみません。
http://moonrock.jp/~don/ruby/#WEBrick3a3aSession
に動作サンプルもあります。
067066905/01/10 10:08:44ID:???
>>669
バグを修正して、
WEBrick::Session#updateは呼び出さなくても動作するようになりました。
0671666 = 66805/01/11 03:03:29ID:???
>669
おおー。こういうのが欲しかったんです。
ありがとございますん。

さらに欲をいうと、こいつを、WEBrick::CGIだけじゃなくてServletでも使いたいな、と
思うわけですが、それは無謀?

ファイナライザがそのまま使われているようなので、
そのままじゃ使えないとは思いますが。
067266905/01/11 06:42:23ID:???
>>671
ファイナライザの代わりに、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:???
確立しないとCGIの作りにもよりますがユーザー権限を乗っ取られる場合もあります
0675nobodyさん05/01/11 23:21:34ID:???
???
067666605/01/12 01:56:04ID:???
>>672
ああ、そうか。面倒なこと考えなくても、自分で一発close呼んじゃえばいいんですね。
了解です。感謝。
0677nobodyさん05/01/12 13:02:40ID:???
>>674
それは「確立したセッションが奪われたら」の話では?
0678nobodyさん05/01/12 15:16:06ID:???
> セッションって確立しないとどうなるの?
あるHTTPリクエストと、別のHTTPリクエストが、同一のユーザによる一連の操作であるかどうかがわからない。
ただそれだけ。
0679nobodyさん05/01/12 18:15:05ID:+NFabzw5
>>674
>>677
>>678
ありがとうです。
ショッピングカートとかならまだしもですが、ただの掲示板には要らなさそうですね・・・。
0680nobodyさん05/01/12 22:07:09ID:???
管理画面とかいらないならね
0681nobodyさん05/01/12 23:33:50ID:???
「この内容でupしますよ、いいですね?」確認画面すら不要ならば。
0682nobodyさん05/01/12 23:36:31ID:???
>>681
それはstatelessに実装することもできる
0683nobodyさん05/01/13 08:14:30ID:a5QOCrWy
隠しコントロールにそのページ固有の値をもたせるだけでも「セッションもどき」が実現できないかなあ。
一連の操作で使う共通の変数とかもそれ用のログファイル作ってそれに保管しとけばそれらしい挙動しそう。
0684nobodyさん05/01/13 08:17:05ID:???
セッションが不要な場合はセッションもどきで実現する必要はない。
セッションが必要ならセッションを実現すればよい。
結局、セッションもどきなど必要ない。
0685nobodyさん05/01/13 08:50:59ID:a5QOCrWy
いや、クライアント様のパソコンを汚さずにセッションみたいなことが出来ないかなーと思って。
0686nobodyさん05/01/13 09:15:31ID:???
セッション=cookie、ではない。
セッションの確立にはリクエストを横断した固有情報があればよく、それはURLに埋め込んでも、
フォームの隠しフィールドに入れても構わない。
ただその場合はHTMLの動的生成能力が必要になる。
0687nobodyさん05/01/13 09:34:29ID:???
>>686
「セッションもどき」自体が存在しない、ということ?
0688nobodyさん05/01/13 22:51:12ID:???
>>687
それはセッションであるということ。
0689nobodyさん05/01/14 17:22:14ID:2UhA1iN0
あたかも配列をいじくるかのようにログファイルの任意の行をサクサク操作できるモジュールってない?
0690nobodyさん05/01/14 17:28:09ID:???
>>689
全てメモリにかかえちゃっていいなら File::readlines しちゃえば?
0691nobodyさん05/01/14 17:48:34ID:2UhA1iN0
いや、それだとメモリ食うので、任意の行だけメモリに読み込んで、その行だけ書き換えたいのです。
0692nobodyさん05/01/14 18:22:52ID:???
20年位前のプラグラミングですかw
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:???
http://raa.ruby-lang.org/list.rhtml?name=mmap
これでファイルをメモリにmapするとか。
0696nobodyさん05/01/17 17:17:54ID:LAuXubNJ
Rubyレシピブック読んでたら、終わりの方に「オブジェクトを文字列化しファイルに保存する」てのがあって、配列がそのまんまファイル化できるみたいなんだけど、これってCGIにも応用できないかな。
掲示板とかでログの各行を配列に読み込むより効率的と思ったんだが。
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:???
696 のって Marshal のこと?
ちと taint っていうのを知らなかったのですが、
AAA でなら Marshal は使えましたよ。
解析を行った結果をシリアライズして保存しておけば、
次読み込む時はスクリプトレベルでの解析を実行しない分高速化できますよ。
掲示板でいうならテンプレート部分とか。
0701nobodyさん05/01/18 13:52:57ID:???
>>697
taint できないというのはどういう問題?
たとえばテキストファイルに保存する場合は taint できて Marshal だとできない?
0702nobodyさん05/01/20 17:28:23ID:???
http://elitists.net/%7Ekain/sessions/index.html

railsでセッション管理をやってみたいと思っています。上の資料だと、
DRb Store かActiveReco Storeがよさげです。
どちらかの実際のコードを示した資料はあるでしょうか?
0703nobodyさん05/01/21 10:38:11ID:???
>>702
そのベンチマーク自体は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:???
>>703
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:D1xpGaFb
だれか迷路のソース持ってる人いませんか??
0706nobodyさん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:???
Railsの日本語ML
http://dev.rakusui.jp/diary/?date=20050124#c03
0709nobodyさん05/01/28 00:17:00ID:???
Railsを使ってみました。CGI:Sessionを使っているので、
文字列しかセットできないの?
簡単なコードを書いたけど、うまく渡せたり渡せなかったりです。
1. ShoppingCart.rb
2. @session[:cart] = cart (in controller/application.rb)
3. うまく渡せたり渡せなかったり。。


0710nobodyさん05/01/28 00:23:23ID:???
「Railsの @session はデフォルトで PStore を使うので
ほぼ何でも入ります。」とのこと。
(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は空っぽ。
なぜだー!
初心者ですまそ。
0712nobodyさん05/01/30 01:00:53ID:???
>>711
そもそもアップロードフォームの属性はenctype="multipart/form-data"になってるか?
0713nobodyさん05/01/30 01:31:36ID:???
>>711
> file = cgi.params["file"][0]
multipart の場合は、この file は TempFile クラスか StringIO クラスのオブジェクトです。
071471305/01/30 01:48:09ID:???
あ、ごめん Tempfile クラスだ
071571105/01/31 00:34:13ID:???
>>712
ちゃんと本見てるので、そこは押さえてまつ。
その本には送られてきたテキストファイルの内容をそのまま表示する方法しか載ってなかったもんで。

>>713
fhにfileの内容を出力するのにprintメソッドじゃダメってこと?
0716nobodyさん05/01/31 01:27:28ID:???
>>715
Tempfile か StringIO から read で中身を読み出さないとだめってことです
0717nobodyさん05/01/31 02:09:28ID:???
>>711
CGIパラメータの取得方法は、Ruby1.8系から変わってる。
もしもrubyのバージョンが1.8以降なら、ちょっとリファレンスを読んでみ。
0718nobodyさん05/01/31 03:08:48ID:???
fh.print file.read
071971105/01/31 07:51:50ID:jhetKWRL
なるほど!
file.readってやるのね。

激しくサンクスです。
072071105/02/02 07:41:41ID:+oua1U51
やっぱりダメだった・・・orz
サーバエラーにはならないけど、.readのあたりでスクリプトが止まります。
バージョンは1.6.8です。

もうcgiライブラリを使う方法はあきらめ、直接ARGF.readで得たバイト列からJPGファイルを生成しようかと考え中。
0721nobodyさん05/02/02 10:23:32ID:???
バイナリモードで開いてる?
■ このスレッドは過去ログ倉庫に格納されています