【Ruby】RubyでCGI
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。
2001/05/04(金) 12:57ID:c4hRtzGY関連リンクは>>2-3
0203nobodyさん?
03/02/07 16:01ID:???0204nobodyさん
03/02/07 17:59ID:???0205nobodyさん
03/02/07 19:11ID:???特殊文字って何よ、特殊文字って?
@みたいにマックでは読めない機種依存文字のこと?
それだとShift_JIS自体の問題になると思うんだけど…。
(ただのhtmlでも問題起きるわけだし…)
0206nobodyさん
03/02/07 20:28ID:???0207nobodyさん
03/02/14 11:45ID:S51j/Le3amritaについてきたサンプルを実行してみたのですが、
どういう時に使うと嬉しいのかが、いまいちぴんと来ません。
こう使うと便利だっ、という例ありますか。
0208nobodyさん
03/02/17 03:23ID:???フォームから送られたデータを勝手に処理してくれるのは楽。
まだぽこぽこバグがあるみたいだけど。
ただ、フレームワークだから慣れるのに時間がかかると思う。
コンポーネント指向のWebアプリ開発も同じく。
cgi.rbやeRubyに特に不満がなければ無理に使うこともないかと。
0209207
03/02/17 05:27ID:???レスどうも。
どうやら、今の私には必要ないようです。
0210nobodyさん
03/02/22 02:08ID:???Perl,PHP→Ruby移植をやってほすぃ。
0211nobodyさん
03/02/23 01:26ID:???ショボイのしか作れなくて悪かったね!
つか、言語自体のスタイルが違うから移植するより、
新しく構築した方が早いし、メンテが楽。
0213nobodyさん
03/02/28 14:15ID:Zmsc8h96なんかidがそのままHTMLに出力されてしまう。
どんな原因が考えられる?
0214nobodyさん
03/03/06 22:18ID:???FLASHの画像サイズを取得できなくて困っています。
rubyで扱える方法ってあります?
0215nobodyさん
03/03/07 03:08ID:???http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/freemovie/freemovie/
0216nobodyさん
03/03/08 01:07ID:???perlかPHPを読むしかないか...
0217nobodyさん
03/03/11 11:05ID:1APakuZe下記のように書いても、シグナルを捕らえられないようです。
mod_rubyではSIGPIPEは発生しないのでしょうか?
それともなにか勘違いしてますか?
#! /usr/bin/ruby
require "cgi"
trap("PIPE") {STDERR.puts 'PIPE'}
print_http_header #httpのヘッダーを吐くルーチン
#10秒かけてデータを出力
for i in 0...100
print i,"<br>\n"
sleep(0.1)
end
0218217
03/03/11 14:11ID:???中断してもシグナルは飛んでこないようです。
0219nobodyさん
03/03/13 14:09ID:ZqR/jItiだれか使いませんか?
ttp://xx.homelinux.net/~ruby/flexbbs/
0220山崎渉
03/03/13 16:55ID:???0221nobodyさん
03/03/13 22:00ID:???mod_ruby環境下だと$stdoutがIOじゃなくApache::Requestに
なるのでprintしてもSIGPIPEは発生しません。
$stdout.connection.aborted?でクライアントが接続しているか調べられる。
if $stdout.connection.aborted?
STDERR.puts "aborted"
end
0222nobodyさん
03/03/15 09:09ID:77D9QknZ0223nobodyさん
03/03/15 09:10ID:???ここの1の動画にゾクゾクきた。
0224217
03/03/15 14:43ID:???> なるのでprintしてもSIGPIPEは発生しません。
そうですか。
クライアントが読み込みを中断して、処理が中断すると
まずいので、mod_rubyの仕様はむしろ都合がよいです。
> $stdout.connection.aborted?でクライアントが接続しているか調べられる。
勉強になります。
0225nobodyさん
03/03/18 11:02ID:s+XgHl7g0226nobodyさん
03/03/18 14:10ID:???0227nobodyさん
03/03/19 13:18ID:???同じことをするなら CPU usage は Perl よりちょい多いかなくらいだよ。
むしろ PHP はかなり CPU を食う。
http://www.bagley.org/~doug/shootout/craps.shtml
ただ、OOP ゆえにライブラリ使いまくりで重くなっている可能性はあるね。
0228nobodyさん
03/03/19 15:00ID:???全く工夫せずにそのままラップしてあるのも潔よい
0229nobodyさん
03/03/20 05:03ID:???一度requireしたらリセットできないなど、
レンタル鯖では使い辛いような気がしますが、
気のせい?
0230nobodyさん
03/03/20 05:22ID:???ならmod_rubyを使わなければ良いのでは
寿命が長いから顧客向けじゃないと思う
0232nobodyさん
03/03/21 17:51ID:???0233nobodyさん
03/04/11 04:13ID:EmBndhA4http://www.daifukuya.com/photoxp/
0234nobodyさん
03/04/11 09:37ID:???普通のプログラマには嬉しい言語なのにな。悲しい現実だよ。
0235nobodyさん
03/04/11 16:40ID:???普通のプログラマが嬉しければ流行る。
なぜなら厨プログラマは上層の反応に素直に反応するから。
という事はRubyに何か痛い点がある。それはね・・・。 つづく。
0236nobodyさん
03/04/13 21:21ID:???痛い点って???すげぇ気になる&age
0237山崎渉
03/04/17 12:03ID:???0238山崎渉
03/04/20 06:26ID:???( ^^ )< ぬるぽ(^^)
0240nobodyさん
03/05/03 10:48ID:???http://21c.ath.cx/program/ruby/cgi/bbs/flexbbs/
0241nobodyさん
03/05/04 07:47ID:c2Xx7eHEテンプレートコンパイラ機能を使いたいです。
0242nobodyさん
03/05/04 13:08ID:???ファイル名を空にして送信したときに
Tempファイルが残ったままになることが、たまにあるんだがどうして?
0243nobodyさん
03/05/06 15:00ID:???0245nobodyさん
03/05/07 09:22ID:???Warning がいくつか出たけど、とりあえずコンパイルできました。
0246nobodyさん
03/05/07 10:26ID:QZ929xpM0247nobodyさん
03/05/08 21:06ID:???テーマ機能つかって、css で制御するんじゃない?
0248nobodyさん
03/05/09 15:05ID:???ってな感じに、部分的にフォントを変えたいのだけど、
タグを使えるような抜け道が用意されているのかなと思って。
0250山崎渉
03/05/22 02:04ID:???0251山崎渉
03/05/28 17:18ID:???ピュ.ー ( ^^ ) <これからも僕を応援して下さいね(^^)。
=〔~∪ ̄ ̄〕
= ◎――◎ 山崎渉
0252るびきち
03/06/11 04:39ID:???ピュ.ー ( ^^ ) <これからも僕を応援して下さいね(^^)。
=〔~∪ ̄ ̄〕
= ◎――◎ rubikitch
0253nobodyさん
03/06/17 10:18ID:CDKrfOSa0254nobodyさん
03/06/17 11:43ID:???http://www.pragmaticprogrammer.com/ruby/index.html
0255あぼーん
NGNG0256nobodyさん
03/06/19 21:56ID:c0HjpDNQどちらも行うスクリプトを書く時、
どのライブラリをrequireしてどのメソッドを使うのが効率がいいですか?
0258nobodyさん
03/06/20 20:09ID:???足りないノウハウ等がありましたら、どうかご教授ください。
以下にコードを挙げます。
ちなみに、複数選択可能なselectは考慮してませんし、使う気がございません。
0259258
03/06/20 20:12ID:???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
0260258
03/06/20 20:12ID:???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
0261258
03/06/20 20:12ID:???$stdin.binmode
$stdin.read(ENV['CONTENT_LENGTH'].to_i)
end
end
0262あぼーん
NGNG0263本7 ◆uPD9aFm9hI
03/06/21 02:13ID:???0265258
03/06/21 23:32ID:???それはさておき、
危惧していることは、
1.windows9xでgetMultipartData()の内容は問題ないのであろうか?また問題あるのであれば、どうすべきか?
2.getFormMultipart()のarray.eachの内容で想定していないデータが来るケースがあるであろうか?
です。大丈夫でしょうか‥?
0266nobodyさん
03/06/25 00:21ID:xZOuwnMzperlスクリプトの区別を付けるため、rubyのスクリプトは.rbとしているのですが、アパッチのほうは
AddHandler cgi-script .rb
こうやっています。なにかまずいことはありますでしょうか?
あと、rubyのモジュールとはいったいどういうものなのでしょうか?
0267nobodyさん
03/06/25 08:55ID:???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:???Apacheはそれで良いと思う。
モジュールとは端的に言うとインスタンスが作れないクラス。
Rubyは単一継承だからクラスは一つのスーパークラスしか持てないが、
モジュールであれば複数取り入れることが出来る。
class C0
#...
end
module M0
#...
end
module M1
#...
end
class C1 < C0 # スーパークラスは一つのみ
include M0
include M1 # モジュールはいくつでも取り込める
#...
end
これでC1はC0、M0、M1で定義されたメソッドを継承することになる。
また、モジュールの中でクラスや他のモジュールを入れ子にすることで
名前空間を作るのにも使用する。
267はその例。
0269265
03/06/28 17:58ID:t6ndrw6Wなるほど、、まぁ、はじめたばっかりの私にとってはクラスとかあんまりあからないので、大丈夫かなぁ・・・
ありがとうございました。
0270nobodyさん
03/06/28 17:59ID:t6ndrw6W0271nobodyさん
03/07/08 12:15ID:cQ+4nOpScgi.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:???0273山崎 渉
03/07/15 11:06ID:???__∧_∧_
|( ^^ )| <寝るぽ(^^)
|\⌒⌒⌒\
\ |⌒⌒⌒~| 山崎渉
~ ̄ ̄ ̄ ̄
0274nobodyさん
03/07/20 18:39ID:MTCslCJPservlet+JSPより好きなので、age。
0275nobodyさん
03/07/21 05:15ID:???0276nobodyさん
03/07/21 14:33ID:???今回の流れで色々と複雑な事情があるのだなあと知りました。
陰ながら応援sage。
0277nobodyさん
03/07/21 23:32ID:???<% か <%= のどっちかだけ。
0278nobodyさん
03/07/26 01:58ID:aoovL48qRubyに標準で添付されている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:???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';
0282278
03/07/27 00:09ID:zQkWZE8hご教示ありがとうございました。
結局、cgi.rbの中身を解析し、何箇所か修正を加えることで、
目的を達成することができたみたいです。
0283278
03/07/27 00:15ID:zQkWZE8h>>280さんの方法では、私の環境ではエラーになってしまいました。
0284nobodyさん
03/07/27 01:41ID:???0286nobodyさん
03/07/27 04:47ID:???0287279
03/07/27 17:47ID:???print "pl rb pl rb".gsub( /(pl|rb)/, ($1=='pl') ? 'Perl': 'Ruby')
これだと ($1=='pl') がかならず false になってしまい、
Ruby Ruby Ruby Ruby になってしまいます
なにゆえでしょう?
0289279
03/07/27 18:32ID:???勇者にロトと名づける裏技、見つかりました
print "pl rb pl rb".gsub(/pl|rb/) {|m|
m = (m=='pl')? 'Perl' : 'Ruby'
}
これでやったらできました。 |m| あたりが良くわからんけど。
ruby-lang.orgのgsubのリファレンスマニュアルみたらすぐ見つかりました。すみません
rubyの後方参照($1とか\1とか)はあんま柔軟なことできないみたいですね
ありがとうございました
0292nobodyさん
03/07/28 00:51ID:???puts "pl rb pl rb".gsub(/(pl|rb)/) { ($1 == 'pl') ? 'Perl' : 'Ruby' }
0293nobodyさん
03/07/28 01:38ID:???pattern = Regexp.compile(table.keys.join('|'))
puts("pl rb pl rb".gsub(pattern){table[$&]})
0294279
03/07/28 02:04ID:???そっちの方がカコイイ!!ありがとう
>>293
最適化されてしまった...
table.keys.join('|')って汎用的でおもしろいアイデアですね。ワラタ
おもしろいなRuby
0295nobodyさん
03/07/28 22:58ID:???キーが正規表現含むとおかしくなるから
quoteしたほうがいい
pattern = Regexp.compile(table.keys.collect {|key| Regexp.quote(key) }.join('|'))
0296279
03/07/29 00:45ID:???いやぁ、やりたかったことは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")
0297279
03/07/29 00:53ID:???検索速度がorでつなげるより速そうだから [<%][%>]=? なんてしてるんですが
よく考えたらパターンは <%、%>、<%=、%>=、>%、%<、>%=、%<= の8通りだけだから連想配列の方が良いか
まあいいや、ERBとかいうのを使おう...。スレ汚しすんまそん。ハァ
0298nobodyさん
03/07/29 00:57ID:???0300nobodyさん
03/07/29 23:02ID:SXyppRH6利用しなくなったセッションファイルを自動で消去することは
できないんでしょうか?
ある本をよんだら、CGI::Session.sweep()を使うと書いてあった
のですが、エラーが出て使えません。
0301nobodyさん
03/07/30 03:09ID:???> ある本をよんだら、CGI::Session.sweep()を使うと書いてあった
sweepの定義はその本に書いあるのだと思われ。
利用しなくなったかどうかの判断基準は利用者によって異なる。
だから、一般的な方法は存在しない。
■ このスレッドは過去ログ倉庫に格納されています