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

【Ruby】RubyでCGI

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。2001/05/04(金) 12:57ID:c4hRtzGY
Rubyについて語るスレッドです。
関連リンクは>>2-3
0230nobodyさん03/03/20 05:22ID:???
>229
ならmod_rubyを使わなければ良いのでは
寿命が長いから顧客向けじゃないと思う
0231nobodyさん03/03/21 10:57ID:???
>>229
loadは?
0232nobodyさん03/03/21 17:51ID:???
2回以上ロードされることを念頭においたライブラリは多くないだろう
0233nobodyさん03/04/11 04:13ID:EmBndhA4
Rubyで書かれた2ch型掲示板↓
http://www.daifukuya.com/photoxp/
0234nobodyさん03/04/11 09:37ID:???
>>225 オブジェクト歯垢は、厨プログラマには使えないから普及しない気がする。
普通のプログラマには嬉しい言語なのにな。悲しい現実だよ。
0235nobodyさん03/04/11 16:40ID:???
ちと違う。
普通のプログラマが嬉しければ流行る。
なぜなら厨プログラマは上層の反応に素直に反応するから。
という事はRubyに何か痛い点がある。それはね・・・。         つづく。
0236nobodyさん03/04/13 21:21ID:???
>235
痛い点って???すげぇ気になる&age
0237山崎渉03/04/17 12:03ID:???
(^^)
0238山崎渉03/04/20 06:26ID:???
   ∧_∧
  (  ^^ )< ぬるぽ(^^)
0239nobodyさん03/04/26 16:38ID:???
>>235
ネタだけ振って逃げたな。
0240nobodyさん03/05/03 10:48ID:???
>>219
http://21c.ath.cx/program/ruby/cgi/bbs/flexbbs/
0241nobodyさん03/05/04 07:47ID:c2Xx7eHE
Amrita1.8.2、Cygwin でなく、mswin版Rubyで使えるようになりませんか?
テンプレートコンパイラ機能を使いたいです。
0242nobodyさん03/05/04 13:08ID:???
multipartなFORMを使ってファイルをアップするCGI作っています
ファイル名を空にして送信したときに
Tempファイルが残ったままになることが、たまにあるんだがどうして?
0243nobodyさん03/05/06 15:00ID:???
自分用語で言われても、、、ね?
0244nobodyさん03/05/06 20:26ID:???
>>241
amrita/ext 配下が VC++ でコンパイル通らないってこと?
エラーメッセージは?
0245nobodyさん03/05/07 09:22ID:???
>244
Warning がいくつか出たけど、とりあえずコンパイルできました。
0246nobodyさん03/05/07 10:26ID:QZ929xpM
Hikiでフォント変えられるの?
0247nobodyさん03/05/08 21:06ID:???
フォント?
テーマ機能つかって、css で制御するんじゃない?
0248nobodyさん03/05/09 15:05ID:???
test<font face="Arial">test</font>
ってな感じに、部分的にフォントを変えたいのだけど、
タグを使えるような抜け道が用意されているのかなと思って。
0249nobodyさん03/05/09 19:15ID:???
>>248
フォントを指定するプラグインを作ってください。
0250山崎渉03/05/22 02:04ID:???
━―━―━―━―━―━―━―━―━[JR山崎駅(^^)]━―━―━―━―━―━―━―━―━―
0251山崎渉03/05/28 17:18ID:???
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉
0252るびきち03/06/11 04:39ID:???
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      rubikitch
0253nobodyさん03/06/17 10:18ID:CDKrfOSa
Rubyでオブジェクト指向の勉強に最適なサイトはないですか?
0254nobodyさん03/06/17 11:43ID:???
これだな。
http://www.pragmaticprogrammer.com/ruby/index.html
0255あぼーんNGNG
あぼーん
0256nobodyさん03/06/19 21:56ID:c0HjpDNQ
IPからホスト名の取得と、ホスト名からIPの取得
どちらも行うスクリプトを書く時、
どのライブラリをrequireしてどのメソッドを使うのが効率がいいですか?
0257nobodyさん03/06/20 02:08ID:???
>>256
resolv.rb
0258nobodyさん03/06/20 20:09ID:???
cgi.rbを使いたくないので、フォームから取得するモジュールを書いてみたのですが、
足りないノウハウ等がありましたら、どうかご教授ください。
以下にコードを挙げます。
ちなみに、複数選択可能なselectは考慮してませんし、使う気がございません。
025925803/06/20 20:12ID:???
module CGITool
  FNAME = {}
  CONTENT_TYPE = {}
  def CGITool.getForm()
    if ENV['CONTENT_TYPE'] =~ /^multipart/
      return getFormMultipart()
    end
    data = ""
    if(ENV['REQUEST_METHOD'] == 'POST')
      data = $stdin.read(ENV['CONTENT_LENGTH'].to_i)
    else
      data = ENV['QUERY_STRING']
    end
    form = {}
    if(data != nil)
      data.split(/&/).each{|pair|
        key, value = pair.split(/=/, 2)
        key = unescape(key)
        value = unescape(value)
        if(form.include?(key))
          form[key] += " " + value
        else
          form[key] = value
        end
      }
    end
    form
  end
026025803/06/20 20:12ID:???
  def CGITool.unescape(s)
    s.tr('+', ' ').gsub(/((?:%[0-9a-fA-F]{2})+)/n) do
      fconv([$1.delete('%')].pack('H*'))
    end
  end
  def CGITool.fconv(s)
    s
  end
  def CGITool.getFormMultipart(data = getMultipartData())
    data =~ /^\-+(\w+)\r?\n/
    word = $1
    array = data.split(/\r?\n?\-+#{word}\-*\r?\n/); array.shift
    form = {}
    array.each do |c|
      c.sub!(/^Content-Disposition: form-data; name="(.*?)"(?:; filename="(.*)")?\r?\n/, '')
      key = $1; filename = $2
      if filename
        FNAME[key] = filename.sub(/^.*[\\\/\:](?:.*)[\\\/\:]/, '')
      end
      cLength = c.length; c.sub!(/^\r?\n?/, '')
      if cLength != c.length
        form[key] = fconv(c)
      else
        c.sub!(/^Content-Type: (.*)\r?\n\r?\n/, '')
        CONTENT_TYPE[key] = $1
        form[key] = c
      end
    end
    form
  end
026125803/06/20 20:12ID:???
  def CGITool.getMultipartData
    $stdin.binmode
    $stdin.read(ENV['CONTENT_LENGTH'].to_i)
  end
end
0262あぼーんNGNG
あぼーん
0263本7 ◆uPD9aFm9hI 03/06/21 02:13ID:???
究極はBASICだよ
0264nobodyさん03/06/21 14:45ID:???
>>258
議論のノウハウが足りないようだが。
026525803/06/21 23:32ID:???
うっ‥それでは議論のノウハウをご教授していただきたいものです‥
それはさておき、
危惧していることは、
1.windows9xでgetMultipartData()の内容は問題ないのであろうか?また問題あるのであれば、どうすべきか?
2.getFormMultipart()のarray.eachの内容で想定していないデータが来るケースがあるであろうか?
です。大丈夫でしょうか‥?
0266nobodyさん03/06/25 00:21ID:xZOuwnMz
すいません。perlから、Rubyに挑戦しているものです。
perlスクリプトの区別を付けるため、rubyのスクリプトは.rbとしているのですが、アパッチのほうは
AddHandler cgi-script .rb
こうやっています。なにかまずいことはありますでしょうか?
あと、rubyのモジュールとはいったいどういうものなのでしょうか?
0267nobodyさん03/06/25 08:55ID:???
module M
  class C
    def to_s
      "[an instance of class C in module M]"
    end
  end
end

p M::C.new

include M
p C.new
0268nobodyさん03/06/28 17:06ID:???
>>266
Apacheはそれで良いと思う。

モジュールとは端的に言うとインスタンスが作れないクラス。

Rubyは単一継承だからクラスは一つのスーパークラスしか持てないが、
モジュールであれば複数取り入れることが出来る。

class C0
  #...
end

module M0
  #...
end

module M1
  #...
end

class C1 < C0 # スーパークラスは一つのみ
  include M0
  include M1 # モジュールはいくつでも取り込める
  #...
end

これでC1はC0、M0、M1で定義されたメソッドを継承することになる。

また、モジュールの中でクラスや他のモジュールを入れ子にすることで
名前空間を作るのにも使用する。
267はその例。
026926503/06/28 17:58ID:t6ndrw6W
>>268
なるほど、、まぁ、はじめたばっかりの私にとってはクラスとかあんまりあからないので、大丈夫かなぁ・・・
ありがとうございました。
0270nobodyさん03/06/28 17:59ID:t6ndrw6W
名前欄の数字みすった。スマソ
0271nobodyさん03/07/08 12:15ID:cQ+4nOpS
多分既出だと思いますが
cgi.rbを使ってあぷろだを作っているのですが、マルチパートの扱いがよく分かりません。
FORMのENCTYPEがmultipart/formdataのとき

values = cgi['field_name'] # <== field_nameの配列
values[0].read # <== values[0]の本文
values[0].local_path # <== values[0]のローカルファイルのパス
values[0].original_filename # <== values[0]の元の名前
values[0].content_type # <== values[0]のcontent_type

でアップロードしたファイルのデータが取得できるのでしょうか?
0272nobodyさん03/07/14 19:21ID:???
秋風が吹く頃に勉強する予定なのでageといてやる。
0273山崎 渉03/07/15 11:06ID:???

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄
0274nobodyさん03/07/20 18:39ID:MTCslCJP
mod_ruby+eruby。
servlet+JSPより好きなので、age。
0275nobodyさん03/07/21 05:15ID:???
ruby-listでerbの改造について盛り上がってるね。これで速さがphp並になれば……。
0276nobodyさん03/07/21 14:33ID:???
私は % のエスケープも<% # %>も使わないので、
今回の流れで色々と複雑な事情があるのだなあと知りました。
陰ながら応援sage。
0277nobodyさん03/07/21 23:32ID:???
俺も使わないなあ。規模が違うってのもあるんだろうけど。
<% か <%= のどっちかだけ。
0278nobodyさん03/07/26 01:58ID:aoovL48q
初歩的な質問で申し訳ないんですが、
Rubyに標準で添付されているCGI.rbというライブラリでは、
タグを生成するときの大文字は変更できないんでしょうか?
最近ではxmlの関係もあって小文字で出力したいと思うんですが・・・

例)大文字 → <HTML><H1>
  小文字 → <html><h1>
0279nobodyさん03/07/26 02:32ID:???
あまり、調べてなくて申し訳ないんですが
RubyでPerlでいう↓のやつできませんか?

print << 'EOS';
  <html>
    <body>パパの特盛</body>
  </html>
EOS

>>278
タグの内部だけ?相当むずかしいんじゃないの?
タグ内のデータとかは大文字のままじゃないといけないんでしょ?
例:<INPUT NAME=OOMOJI> ⇒ <input name=OOMOJI>
たぶん、それはないと思う。変換機能がついたHTMLエディタとかどぞ
0280nobodyさん03/07/26 03:02ID:???
>>278
cgi.rb のかわりにこれの出力を require してみたらどうなる?

print(File.read($:.map{|i|i+"/cgi.rb"}.find{|i|File.readable?(i)}).gsub(/element\.upcase/,"element.downcase"))

>>279
×print << 'EOS';
○print <<'EOS';
028127903/07/26 03:16ID:???
>>280
うわあぁああぁぁ!
いぃち文字消したらでぇきたぁー!
サンクス!
028227803/07/27 00:09ID:zQkWZE8h
>>279-280
ご教示ありがとうございました。

結局、cgi.rbの中身を解析し、何箇所か修正を加えることで、
目的を達成することができたみたいです。
028327803/07/27 00:15ID:zQkWZE8h
補足

>>280さんの方法では、私の環境ではエラーになってしまいました。
0284nobodyさん03/07/27 01:41ID:???
cgi.rb suxx
0285nobodyさん03/07/27 02:19ID:???
>>284
CGI.pm がこの世に存在しなければあんなダメダメなライブラリにはならかったんじゃないかと想像。
0286nobodyさん03/07/27 04:47ID:???
narf のベータが取れるのを待つしか。
028727903/07/27 17:47ID:???
gsubで、引っかかった文字によって置き換える文字を変えたいのですが

print "pl rb pl rb".gsub( /(pl|rb)/, ($1=='pl') ? 'Perl': 'Ruby')
これだと ($1=='pl') がかならず false になってしまい、
Ruby Ruby Ruby Ruby になってしまいます
なにゆえでしょう?
0288nobodyさん03/07/27 18:05ID:???
>>287
簡単に言うとドラクエの勇者に「ロト」って名前付けられないのと一緒だ。
028927903/07/27 18:32ID:???
>>288
勇者にロトと名づける裏技、見つかりました

print "pl rb pl rb".gsub(/pl|rb/) {|m|
  m = (m=='pl')? 'Perl' : 'Ruby'
}
これでやったらできました。 |m| あたりが良くわからんけど。
ruby-lang.orgのgsubのリファレンスマニュアルみたらすぐ見つかりました。すみません

rubyの後方参照($1とか\1とか)はあんま柔軟なことできないみたいですね
ありがとうございました
0290nobodyさん03/07/27 21:35ID:???
>>289
> rubyの後方参照($1とか\1とか)はあんま柔軟なことできないみたいですね

下手な煽り文句ですね。
029127903/07/28 00:29ID:???
>>290
え?べつに煽ってはいませんよ
煽りに見えたならそれはすみません
0292nobodyさん03/07/28 00:51ID:???
>>289
puts "pl rb pl rb".gsub(/(pl|rb)/) { ($1 == 'pl') ? 'Perl' : 'Ruby' }
0293nobodyさん03/07/28 01:38ID:???
table = {'pl'=>'Perl', 'rb'=>'Ruby'}
pattern = Regexp.compile(table.keys.join('|'))
puts("pl rb pl rb".gsub(pattern){table[$&]})
029427903/07/28 02:04ID:???
>>292
そっちの方がカコイイ!!ありがとう

>>293
最適化されてしまった...
table.keys.join('|')って汎用的でおもしろいアイデアですね。ワラタ

おもしろいなRuby
0295nobodyさん03/07/28 22:58ID:???
> 294
キーが正規表現含むとおかしくなるから
quoteしたほうがいい

pattern = Regexp.compile(table.keys.collect {|key| Regexp.quote(key) }.join('|'))
029627903/07/29 00:45ID:???
>>295
いやぁ、やりたかったことはRubyでPHPみたいなファイルを実行するものなんですけどね。
↓こんな感じ。検索でヒットするパターンが多いからちょっと連想配列は使えないかも。
んで昨日、ERBというライブラリがあることを知ってこれは無駄になりました(´・ω・`)ショボーン

class EzRubyServerPage < Object
  @@boundary = '__BOUNDARY_EZ_RHP__'
  def eval( arg = "" )
    Kernel::eval "$_ = <<"+@@boundary+";\n" + arg.gsub( Regexp.compile('[<%][%>]=?') ){
      ($&=='<%' ) ? "\n"+@@boundary+"\nchop;print;":
      ($&=='<%=') ? "\n"+@@boundary+"\nchop;print;print ":
      ($&=='%>' ) ? "\n$_ = <<"+@@boundary+";\n":
      $&
    } + "\n"+@@boundary+"\nchop;print;"
  end
end
$tokumori = "パパの特盛"
EzRubyServerPage.new.eval("<html><body>ようこそ <%=$tokumori%>へ</body></html>\n")
029727903/07/29 00:53ID:???
>検索でヒットするパターンが多いからちょっと連想配列は使えないかも。

検索速度がorでつなげるより速そうだから [<%][%>]=? なんてしてるんですが
よく考えたらパターンは <%、%>、<%=、%>=、>%、%<、>%=、%<= の8通りだけだから連想配列の方が良いか
まあいいや、ERBとかいうのを使おう...。スレ汚しすんまそん。ハァ
0298nobodyさん03/07/29 00:57ID:???
ちなみに erb は Ruby 1.8 からは標準添付だ。
0299nobodyさん03/07/29 04:29ID:???
>>295
それじゃ自分で正規表現を指定できないではないか
0300nobodyさん03/07/29 23:02ID:SXyppRH6
CGI::Sessionを用いてセッション管理をしようと思うのですが、

利用しなくなったセッションファイルを自動で消去することは
できないんでしょうか?

ある本をよんだら、CGI::Session.sweep()を使うと書いてあった
のですが、エラーが出て使えません。
0301nobodyさん03/07/30 03:09ID:???
>>300
> ある本をよんだら、CGI::Session.sweep()を使うと書いてあった

sweepの定義はその本に書いあるのだと思われ。

利用しなくなったかどうかの判断基準は利用者によって異なる。
だから、一般的な方法は存在しない。
0302nobodyさん03/07/30 04:42ID:???
Rubikitiさん出版おめでとう。
0303nobodyさん03/08/05 00:21ID:???
843 :デフォルトの名無しさん :03/08/01 01:55
るびきち著『Rubyシェルプログラミング−irb&irbsh徹底活用−』8月4日発売です
http://www.gihyo.co.jp/books/syoseki.php/4-7741-1798-6

基本的にこの人は他人との意思疎通が不可能な引き篭り星人な為、
何を言っているのか、何を伝えたいのかが全く見えません。故に専門書としては全く使えません

ではこの本のウリは何か?それは「他人をムカつかせるにはどうすればいいのか?」という厨房必修のスキル養成本としての価値に
他ならないでしょう。礼儀をわきまえない砕けすぎた態度から始まり、徐々に高圧的な態度へ、最後は相手を全否定し卑下し、自分が
相手に比べ、如何に優れた人間であるかを延々と語り続けるその試合運びに、各地厨房サイトから歓声が上がっております
なんとあの、2ちゃんねるネトヲチ板の皆様からも「掲示板のレスが反感を買うための例文集のようだ」とのお墨付きを得ております


そして「絶対零度つまらなギャグ集」としての機能も持ち合わせております。
なぜ、ウケ狙いの小ネタが、そこまでつまらないのか?スベろうと努力したってそこまでつまらない発言できるものではありません
正に天が与え給った才能だNe!! 合コンで思いっきりスベッて周りからジト目で見られてみたいソコのあなた!必読です。

参考文献 Rubyを256倍使うための本 魔道編
0304nobodyさん03/08/06 19:53ID:???
次は農道編キボンヌ
0305山崎 渉03/08/15 22:44ID:???
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン
0306nobodyさん03/08/23 03:43ID:???
eruby で エラーメッセージをブラウザに表示したいんだけど
できません。
MLをみたら $DEBUG = true
にするとありますが、そうしても変化がありません。。。

どうすればいいんですか?
0307nobodyさん03/08/23 19:08ID:???
Internal Server Error とかで eruby から何も返ってこないなら、
eruby 自体が起動されてないんじゃないの?
サーバーの設定を確認した方がいいような。
サーバーのエラーログが見れるのならそこを見るべし。
0308nobodyさん03/08/23 21:49ID:Ba5Hz+Nk
erubyは動いているんですが、apacheのログを開きながらデバッグするのが
面倒くさいだけなんです。

作っている時だけブラウザにエラーを表示してくれると助かるんですが。

eruby + mod_ruby で使ってます。
手元に環境がないんでversionがわかんないんですが、どちらも最新のものだと思います。
0309nobodyさん03/08/23 22:32ID:???
生成したrubyコードが parse error になる場合はstdoutには何も返さん罠。
コマンドラインで実行してみれ。
0310nobodyさん03/08/24 00:59ID:???
>>313

ruby の parse error は apacheのログには表示されますので、
それをブラウザに表示できる設定がないかなと思ったんです。

stderrはerubyでは拾えないということですか?
0311nobodyさん03/08/24 02:40ID:???
parse error って拾えるのか?
0312nobodyさん03/08/24 05:41ID:???
つーかコマンドラインで表示されるエラーを
なんでブラウザで見たいのかがさっぱり分からん
0313nobodyさん03/08/24 06:34ID:3TVF6Tbn
>312
CGIの引数渡すのがめんどくさいんだろ
031431203/08/24 10:00ID:???
>317
めんどくさいていうか、わかんないんです。
コマンドラインでPOSTデータやcookieデータを渡す方法が。

0315あぼーんNGNG
あぼーん
0316nobodyさん03/08/24 20:16ID:???
parse error になるかどうかと入力の有無は関係ないと思うのだが
031731203/08/25 00:38ID:???
別に parse errorばかりのことをいっているんじゃなくて、
例外が発生しても Internal server errorになるわけで。

できないんなら、できないでいいんだけど。
煽られるのって楽しいね。
0318nobodyさん03/08/25 01:25ID:???
おいおい、parse error以外の例外は大抵捕捉できるだろ
つーか、311=312なの??
0319nobodyさん03/08/25 09:27ID:???
どれが>>306かいまいち分からんが、
実行時の例外は $DEBUG=true しとけばブラウザで確認できるはずだから
インタプリタがコンパイルできるかどうかだけはコマンドラインでeruby実行して
調べれっていわれてるんでしょ。
0320nobodyさん03/08/25 14:17ID:IWdWlewI
IISでeRubyって無理なのかな・・・
0321nobodyさん03/08/25 15:13ID:???
ISAPIにすればいけるんでない?
0322nobodyさん03/08/25 18:59ID:???
あれ、eRubyは昔はparse error もバッチリブラウザに出てたけど・・・
ソース丸見えになるのでデフォルトでこれは勘弁と思ったものだ。
0323nobodyさん03/08/26 01:50ID:???
>323
mod_ruby を外したらブラウザに表示できました。
mod_ruby + eruby だと表示できないようです。

--
mod_ruby 1.0.5
ruby 1.6.8 (2003-03-26)
eRuby version 1.0.3
0324nobodyさん03/08/26 11:26ID:???
>>323
なるほど、と思ってソースのあたりをいろいろ探して見た
httpd.conf で
RubyRequire apache/eruby-run -> RubyRequire apache/eruby-debug
RubyHandler Apache::ERubyRun.instance -> RubyHandler Apache::ERubyDebug.instance

に変更したらparse error もブラウザに出た
しかし、HTTPサーバごとデバッグ環境にしなけりゃならんのだなあ・・・
0325nobodyさん03/08/26 22:36ID:???
埋め込みコード系(ERB,eruby)よりHTML::Templateを勧める。

http://raa.ruby-lang.org/list.rhtml?name=html-template2

他の環境(オブジェクト、DB)を変更する副作用が一切ないから
思う存分プレゼンテーションロジックのデバッグが出来る

ビジネスロジックはTest::Unitできちんとテスト書きましょう
0326nobodyさん03/08/31 13:41ID:???
テンプレートなら、amritaと言うライブラリもあるよ。
0327nobodyさん03/09/01 20:45ID:???
>>326

amritaは名前空間が判りづらいから嫌い。
0328nobodyさん03/09/02 06:02ID:jo93f+PB
rubyでCGIを書くにあたって、使ってるデザインパターンとかあります?
0329nobodyさん03/09/03 02:26ID:???
nora はどう?
0330nobodyさん03/09/03 02:41ID:6XWfASQR
HTML::Templateについて詳しいサイトないですか?
html-template.rdだけじゃ、複雑なことしたいときどーすりゃいいか分からん
■ このスレッドは過去ログ倉庫に格納されています