1 :
名無しさん@お腹いっぱい。 :
2001/05/04(金) 12:57 ID:c4hRtzGY Rubyについて語るスレッドです。
関連リンクは
>>2 -3
2 :
名無しさん@お腹いっぱい。 :2001/05/04(金) 12:57 ID:c4hRtzGY
3 :
名無しさん@お腹いっぱい。 :2001/05/04(金) 12:58 ID:c4hRtzGY
4 :
白痴な疑問でスマソ :2001/05/04(金) 16:10 ID:fcczG5h.
Rubyが動くサーバーの条件ってなんですか? rubyが使える無料サーバーってありますか?
5 :
名無しさん@お腹いっぱい。 :2001/05/04(金) 17:23 ID:c4hRtzGY
7 :
4 :2001/05/05(土) 02:36 ID:???
>>5 -6
有難うございました。試しに無料鯖で色々するってワケにはいかない
んですね(perlやPHPと両方使える有料鯖を借りるしかないかー)
ところでRubyのウリってなんでしょう?
というかオブジェクト指向ってどういう意味なんでしょう・・・
Windows に冷たいので逝ってよし!
>>7 有料鯖でも色々(実験とか)したらダメだろ。
Ruby の CGI があまり無いのはなぜだろうか。 1. Ruby 自体普及してない。 2. Ruby 使いは CGI に興味が無い人が多い(?)。 3. いろんな意味で Perl の方が向いている。 4. 作者に悪いが cgi.rb があまり嬉しくない。 すぐに沈むのでage....
13 :
名無しさん@お腹いっぱい。 :2001/05/10(木) 02:53 ID:7PDMmFLY
4.って好みの話? それとも根本的に何かまずい所でもある? cgi.rbを使ったCGIを作って使っているので、 そこんところとても興味あります。
Ruby はウェブプログラミング向きではない。
>>13 cgi.rb には私もお世話になってます。とても有難いです。
ただ、Perl で CGI を書いてる人をやる気にさせる程の
ものじゃないかなってこと。他のライブラリもそうなんだけど
日本人がターゲットなのに(勘違い?)日本語の説明が無いのも
よくないと思います。
あと不満じゃないけど、タグの出力機能は必要無いでしょう。
Ruby 使いで初めて CGI を書く人、暇な人、固い人
以外は使わないような気がする。
>>14 >Ruby はウェブプログラミング向きではない。
というよりも、ウェブプログラミング入門に向いてない、の方が正しくないかな。
スクリプトの中にヒアドキュメント書きまくりは気持ち悪いし、 タグ出力機能はソースの見通しが悪くなる。 ということでおれはeRuby使ってるよ。
19 :
名無しさん@お腹いっぱい。 :2001/05/10(木) 22:23 ID:7PDMmFLY
*.cgi一つでHTMLも書けるというのと、 ヒアドキュメントが嫌いってのがあって、 cgi.rbは重宝しました。 とはいえ、最近になってERbを使い始めている(^^;)。
20 :
名無しさん@お腹いっぱい。 :2001/05/12(土) 00:01 ID:hPIXpPE6
eRubyで書いたドキュメントをCGIとして呼び出して 使っている。だからcgi.rbも使うなぁ。
21 :
名無しさん :2001/06/21(木) 04:52 ID:fZd90uYU
cgi.rbに、改行コードがLFだけのマルチパートなデータをPOSTすると、 read_multipartの中で無限ループするんだけど……。 しかも、NT4.0だとタスクマネージャからRubyを終了出来なかったよ。 Win2000だと終了出来たけど。 Apacheの設定か何かで、無限ループを阻止出来る方法無いの? 一定時間経ったら、自動的にプロセスを殺すとか。
22 :
名無しさん :2001/06/21(木) 04:59 ID:fZd90uYU
あと、cgi.rbの中で呼んでるtempfile.rbって、なんかUNIX依存っぽくないか? Win32なApacheじゃ、素で動かなかったぞ。
23 :
名無しさん :2001/06/21(木) 11:18 ID:???
cgi.rb のマルチパートはバージョン上がるたびにトラぶってる。 (UNIX版もね) うまくいかなかったらバージョン戻してみるのもいいかも
24 :
名無しさん :2001/06/22(金) 02:11 ID:E9i/qXeg
>cgi.rb multipartの各パートをそれぞれ全部一時ファイルに書き出す仕様もなんだかなぁ。 中見てみたけど、eval多用してたりして、厨房な漏れには訳分からん。効率の為なのか? もっとシンプルに書けるんじゃないの? いや、漏れは書けないけど。 Web検索してみたら、このライブラリに不満持ってる人は少なくないみたいだし、 CGI本出しちゃったし、Perl代替を狙うならCGIは欠かせない訳だし、 誰か他の人が書き直してくれないかなぁ、3つ目(?)のCGIライブラリを。
25 :
名無しさん@お腹いっぱい。 :2001/07/03(火) 23:17 ID:hGnmL6gM
cgi以外にRuby使ってる人って どんな用途で使ってんの?
26 :
名無しさん@お腹いっぱい。 :2001/07/03(火) 23:27 ID:Z6/vpDDM
っつうかRubyでCGIを組むメリットってあんの?
>>25 CGIにRubyを使ってるほうが少数派でしょ。RAAを見ても明らか。
28 :
名無しさん@お腹いっぱい。 :2001/07/05(木) 12:53 ID:EtKdHoqM
RAAって何?
それって、CPANとかPEARのRuby版って思って良い?
31 :
名無しさん@お腹いっぱい。 :2001/07/06(金) 02:35 ID:P7VWVoDE
32 :
名無しさん@お腹いっぱい。 :2001/07/09(月) 00:36 ID:XKA0nNxs
タダでRubyCGIが動くレンタルサーバあるかね。
33 :
名無しさん@お腹いっぱい。 :2001/07/12(木) 23:12 ID:.ANFtm8I
multipart使うと cgi = CGI.new したとして cgi['hoge'] じゃなくて cgi['hoge'][0].read しないと値を得られない。 multipart じゃない form からデータがくると read なんつうメソッドはないってエラーが出てしまう。 なんで同じにしなかったんだろう?
34 :
名無しさん@お腹いっぱい。 :2001/07/14(土) 16:34 ID:gnTS0OVs
37 :
tempfile.rb :2001/07/29(日) 23:25 ID:jUN2xdtU
>>22 >あと、cgi.rbの中で呼んでるtempfile.rbって、なんかUNIX依存っぽくないか?
>Win32なApacheじゃ、素で動かなかったぞ。
僕もそんな気がしました。結局、
tempfile.rb[line31]
> def initialize(basename, tmpdir=ENV['TMPDIR']||ENV['TMP']||ENV['TEMP']||'/tmp')
を次のようにいじったところ動くようになりました(?)。
→ def initialize(basename, tmpdir=ENV['TMPDIR']||ENV['TMP']||ENV['TEMP']||'c:/tmp')
かっこ悪い修正ですが、悩んでいる人がいたら助けになるかも。
そんなことしなくても Ruby がインストールしてある ドライブの / (C:\とか) に tmp ディレクトリ作れば動いたよ。
39 :
37 :2001/07/30(月) 23:40 ID:nDJaYIZI
>>38 ほんとはそれでいいらしいんですよね。
こちらの環境ではなぜかうまく動作せず、
(Win2000+Appatch、アドミニストレータで動作)
思考錯誤の結果ああいうかたちになりました。
今度もう一度確かめてみます.
40 :
名無しさん@お腹いっぱい。 :01/09/25 01:51 ID:jG.IKxsA
Rubyを使える無料鯖はXREAがあるので、その記念age
44 :
名無しさん@お腹いっぱい。 :01/09/26 21:30 ID:Y.kwk7Ok
>>42 ちょっと便利かも
とりあえずブクマークしとくわ
PHP>>Perl>Ruby 一流CGIプログラマーの間ではこれが定説なんだってね。 俺も最初聞いた時はそんな馬鹿な!?って驚きを 隠せなかったよ。でも良く調べてみたら確かにその通りだなって納得したよ。
なぜか200近いのであげ
RubyなんかでCGI組んでる奴は糞 ======終了======
一流じゃなくてもやりたきゃやれば良いじゃん OOの勉強には良いと思うよ ただ実用面だとPerlにはかなわん、こっちはこれでもかって位モジュールが有るからねー
>PHP>>Perl>Ruby こんな順位つけてるヤツは所詮2流です。 適材適所が1流の仕事です。
50 :
名無しさん@お腹いっぱい。 :01/12/05 09:58 ID:xi2isyGi
age
51 :
名無しさん@お腹いっぱい。 :01/12/05 18:45 ID:acrdgRBF
Rubyに適したCGIってのもあまり思い浮かばないけどね。
52 :
名無しさん@お腹いっぱい。 :02/01/10 14:32 ID:pG5s4nbd
eRubyをローカル鯖でテストしたいんだが、 次のようなエラーメッセージが出るだけだ。 ERROR ruby: No such file or directory - "" (Errno::ENOENT) 内容はこれ <% print "Content-type: text/html\n\n" print "Hello, ruby!\n" puts "hoge?" puts "hoge?" %> AN httpdを使ってるんだが どうすればいいんだ?
53 :
52 :02/01/10 15:29 ID:SCRJRkGL
質問したけど、 APACHEをインストールして やってみたら解決したYO!! やはり鯖はAPACHEですな。
54 :
名無しさん@お腹いっぱい。 :02/01/12 09:20 ID:3v4I3+Ai
eRuby向きのCGIフレームワークみたいなのないでしょうか。 CGI::Sessionをちゃんとupdateしてくれるとか(これはまった)、 例外拾ってくれてあの派手なエラー画面(+ソース丸見え) が出ないようになってるとか、ページ間の状態遷移を楽に 記述できるとか。 自分で書いててよくわかんないけど、 皆さんどうしてますか。
55 :
名無しさん@お腹いっぱい。 :02/01/17 01:37 ID:eUnOdGnG
TEST
57 :
名無しさん@お腹いっぱい。 :02/01/18 02:13 ID:ElgNfh5R
gzipのストリーム展開ってどうやるんでしょうか? zlibインストールしてみたけどまだ良く解らなくて・・・ くだらん質問でスイマセン。
消防の感想 Rubyに興味があるけど、実際に作りたいプログラムが思い浮かばない。 本に書いてあるスクリプトを丸写ししていても、勉強にならないし。 で、ちょっとでも自分にとって需要があるものと言うと、CGIなんだけど 如何せん、参考に出来るソースが少ない。 ソースが少ないと、CGIの種類が少ないってことだし、 絶対量が少ないと、結果として話題性に乏しくなる。 そうすると、情報量が少なくなる。=> Poorな製作者は作りづらい 作りづらいとCGIが増えないし、公開されるソースも減る。 この循環があるかと、思うのですが。
59 :
名無しさん@お腹いっぱい。 :02/01/24 22:05 ID:C7eIKAZ/
eRuby/erbを使ってる人いる? 初めて使ってみたけどなかなかよかった
>>59 JSPとかColdFusionもそうだけど、あの手のHTMLに埋め込む
タイプのやつ苦手だ。プログラムの可読性下がる。
Rubyの良さ半減て感じ。
>>60 禿げしく同意。短いコードならいいんだがな。
CGI書くときは、内部処理とHTML出力を完璧に分離させて書くけどなあ
63 :
名無しさん@お腹いっぱい。 :02/01/25 04:33 ID:pTuOifZD
RubyでCGIかいてる人いる?
マルチレスすまそsage。
>>58 そういう話になるともう数の問題になってしまうので、
誰かがばりばりCGIを書いて増やすしかない、ってことに
なってしまいそう。地道でよいので徐々に頑張っていく方向で。
>>59 ERbつかってます。良いですね。
>>60 埋め込む量とか程度の問題、と僕は考えてます。
他にはWARLUSとかは違う手法ですね。
ruby-listにでも紹介されてましたが、以下の2ch風(?)BBSで
使われています。
匿名掲示板(仮)
ttp://210.155.146.159/bbs/ >>63 ヘタレなCGIであれば書いてますが、何か?
確かにerubyだけで全部済まそうとすると読めたもんじゃないと思うけど、 データ処理のロジックの部分は普通のスクリプトで書いて表示部分だけerubyで書くと、 処理と出力の分離もできて一石二鳥だと思う。
66 :
名無しさん@お腹いっぱい。 :02/01/26 03:50 ID:YLXIwbR+
WALRUSってなんかすごそう
内緒だけどちゃんと仕事でrubyのCGI作ってるよ。 たしかに重いんだけど、mod_rubyを使えば我慢できないこともない。 なんでrubyを使ったかというと、たんに新しいものが使いたかったって だけだけど。
>>65 それって、内部処理を埋め込みスクリプトからrequireしちゃうってこと?
69 :
名無しさん@お腹いっぱい。 :02/02/02 11:01 ID:5I8PZ1VP
>>59 使ってるよ。
>>68 のいうとおり、erubyスクリプトでは require した後は
ほとんど結果を繰り返し出力するくらいの小さいことしかしてない。
ただうまくいかないのは、結局 rhtml も html なので、
例えば何枚かhtml素片があって好きな部分を表示するには
ロジックを入れて選択するしかないんだよね。
つうわけで、rhtmlがcase when... だらけになったりしてしまい、
あまり美しくならない。結局動的に html 生成するなら、eruby に1発任せるんじゃなくて、
むしろ rhtml は唯のテンプレートと開き直り、
ERb 等で生成ロジックまで自分でコントロールするのが
正しいのかも。
例外拾うのも必須だけど(でないとエラーの時にソースコード丸見え…)
rhtmlにいちいち begin rescue end とか入れたくないよね?
みんなどうしてる?
70 :
名無しさん@お腹いっぱい。 :02/02/04 16:47 ID:C5lTY9nr
72 :
名無しさん@お腹いっぱい。 :02/02/12 10:15 ID:iISjt4Rm
73 :
nobodyさん :02/03/21 07:38 ID:+PRed0xw
上げてみよう
74 :
nobodyさん :02/04/03 13:31 ID:E16D60Iv
ちょっと教えて欲しいんだけど、 Apacheでerbを使う時はhttpd.confに どう設定すればいんでしょうか? eRubyはこれで動くんですが・・・。 AddType application/x-httpd-eruby .rhtml Action application/x-httpd-eruby /cgi-bin/eruby
75 :
nobodyさん :02/04/03 17:58 ID:ToPFq2v0
age
あぼーん
>>74 ERbLightしか使ったことないけど、単にrequireするだけ。
irb(main):001:0> require "erb/erbl"
true
irb(main):002:0> p ERbLight.new("<%= 1 + 2 %>").result(binding)
"3"
nil
ってこういう意味じゃなかったらスマソ。
それとも、erbのほかのクラスとかはまた違うのかな。
78 :
74 :02/04/14 13:55 ID:???
>>77 erbをApacheで使う時もrequireするだけでよかったんですか。
解りました、どうも。
79 :
nobodyさん :02/04/15 10:05 ID:9IRZyByH
No such file to load -- erb/erbl (LoadError) リモートからサーバ上のCGIを動かそうとしたら こんなエラーが出たんだけど、なにかhttpd.confに設定を 加えなきゃならないんでしょうか?
何よるびーってマヅで需要ねえな。
$: を確認してみましょう
82 :
nobodyさん :02/04/26 03:58 ID:XnUMsLyB
require "socket"
host "hoge.com"
sock = TCPSocket.open(host,80)
sock.print "GET / HTTP/1.0\r\n\r\n"
while line = sock.gets
if....
ここで"
http://aaa.com/ "など
HTMLソースの中にアドレスが入ってたりしたら
引っ張ってきたいです。
if文の書き方教えてください。
84 :
nobodyさん :02/05/04 13:13 ID:uTJWVRnZ
CGIでは汚染レベルをいくつで作ってますか? 私は1です。
85 :
nobodyさん :02/05/13 02:54 ID:rVFo8O8l
>>84 俺もCGIモジュールのデフォルト(だっけか)1。
86 :
nobodyさん :02/05/21 11:54 ID:KgEr4A1p
87 :
narucy56 ◆wMOjCT4s :02/06/01 14:21 ID:2HMrwkAK
最強の Web プラットフォーム発見
WEBrick
http://www.notwork.org/ipr/webrick/ Java でいうところの Tomcat みたいなもんで、Ruby で実装された Web Server。
100% Pure Ruby で、カスタマイズも Ruby スクリプトを書くだけで簡単にできる。
XML で設定だのはしなくてもいい。
複雑なシステムを作るときは、Apache だけじゃだめだね。
ちゃんとしたコンテナが作られていないと。柔軟性が確保できない。
89 :
nobodyさん :02/06/06 15:45 ID:pZjuhwXZ
90 :
nobodyさん :02/06/08 07:13 ID:MAfvlHoz
>>87 RubyでWebアプリケーションは作りたいけど、
HTML作ってくれるだけでよくて、
Web serverまではして欲しくないんですが。
こういう使い方もできるのか?
>>90 eRuby だけじゃだめ?
Web アプリのフレームワークがほしいのかな?
92 :
narucy56 ◆wMOjCT4s :02/06/10 17:53 ID:jfQB0Rff
93 :
nobodyさん :02/06/16 08:59 ID:sIr0rq50
>>91 そう、フレームワークがほしいんです。
eRubyだけでちゃんとしたWebアプリケーション書くのはつらいよね。
HTMLとコード(ロジック)が混じっちゃう。
Warlusは開発体制大丈夫なのかなーと不安だし。
Div、読んでみたけど結構面白そう。やってみます。
でもWEBrick必須なんだよね。
>>92 禿同。箱入り娘は驚愕。なんでこんな発想が出来るのか。
これを見たあとだと、他のアプ鯖なんてオブジェクト指向でもなんでもない
単なるサブルーチン集に見えるね。
ERb使ってたらハマりまくったんだけど、 なんで以下の構文がエラーになるんだ? <% foo = "bar" "#{foo}" %> undefined local variable or method `foo' for #<Object:0x4027bce0>
>>95 % irb
irb(main):001:0> require 'erb/erb'
true
irb(main):002:0> erb = ERb.new('<% foo="bar"; #{foo} %>')
#<ERb:0x80d7c18 @src=" foo=\"bar\"; #{foo} \n", @safe_level=nil>
irb(main):003:0> erb.run
"bar"
% cat erb.html
<%
foo = "bar"
"#{foo}"
%>
% ruby /usr/local/lib/ruby/site_ruby/1.6/erb/erb.rb erb.html
%
通りますが、何か? 他のところに問題があるとか。
97 :
95 :02/07/06 22:08 ID:4tjyHIal
>>96 わざわざ試してくれてありがとう。
同じようにテストしたら問題なかったけどこれだとエラーになる。
ruby -r 'erb/erb' -e 'p ERb.new(%(<% foo="bar"; "#{foo}" %>))'
こっちだと動く
ruby -r 'erb/erb' -e 'p ERb.new(%(<% foo="bar"; "#{Time.now}" %>))'
なんじゃこりゃもう。。。
一応環境を書いときます
% ruby -r 'erb/erb' -e 'p ERb.version'
"erb.rb [1.4.3 2002/03/28]"
% ruby -v
ruby 1.6.7 (2002-03-19) [i386-linux]
98 :
95 :02/07/06 22:39 ID:???
99 :
95 :02/07/06 22:40 ID:???
>>98 うっかり書き込むボタンを押してしまいました。ゴメソ。
% ruby -rerb/erb -e "p ERb.version"
"erb.rb [1.4.3 2002/03/28]"
% ruby -v
ruby 1.6.7 (2002-05-23) [i386-freebsd4]
OSはFreeBSD、rubyはportsからインストールしているので、
パッチが当たっていて日付が新しくなってます。
100 :
nobodyさん :02/07/07 00:36 ID:xCJ1zwrA
ζ
,,.-‐''""""'''ー-.、
,ィ" \ やったオレ様が100ゲットだ!
/ `、 ボケ共がオレ様にひれ伏せ!!
,illlllllllllll i
r'-=ニ;'_ー-、___,,.ィ‐‐-,,_ _|
>>101 遅いんだよ、チンカス
| r,i ~`'ー-l;l : : : `l-r'"メ、
>>102 アホすぎる、言葉もない。
ヾ、 `ー‐'": i!_,l_ノ`
>>103 人間辞めろ。
| ,:(,..、 ;:|/
>>104 なにやってんだよ、この包茎ちんちん
| ,,,..lllllll,/
>>105 あらら、ご愁傷さま。死ね
/ `::;;. '"`ニ二ソ
>>106 うっさいハゲ。
/7 ゙゙:`-、;:;:;;;:;:;:;;/
>>107 ビルから飛び降りて死ね。
,,.ィ"`:、 "/;:`ー-:、.._
>>108 ネットワークすんなゴミが!。
‐'":;:;:;:;:;:;:;:\ . : :;: . ;/;:;:;:;:;:;:;:;:;:~`'''ー--:、,,_
>>109 お前はクビを吊れ
ふーん。。。
>>97 だまされるとこだった(w
> ruby -r 'erb/erb' -e 'p ERb.new(%(<% foo="bar"; "#{foo}" %>))'
%(<% foo="bar"; "#{foo}" %>)を評価するときに#{foo}が展開されるからそりゃ当然エラーになるわな。
ruby -rerb/erb -e 'foo="hoge";p ERb.new(%(<% foo="bar"; "#{foo}" %>))'
を試してみりゃ意味が分かるだろ。
結論としちゃ#をエスケープか、%qにしる。
ruby -rerb/erb -e 'foo="hoge";p ERb.new(%(<% foo="bar"; "\#{foo}" %>))'
ruby -rerb/erb -e 'foo="hoge";p ERb.new(%q(<% foo="bar"; "#{foo}" %>))'
104 :
97 :02/07/17 23:43 ID:???
ガ━━(゚Д゚;)━━ソ! 外側からいきなり展開されていたとはね。 いや、参りました(w
最近どう?
106 :
nobodyさん :02/07/31 10:54 ID:p4UQxNW6
ソースは
#!/usr/bin/env ruby
keyword_file = ARGV.shift
suffix_file = ARGV.shift
# 正規表現生成
re = /日本語のページから(.*)を検索しました。/
re2 = /(\d+)件中(\d+) - (\d+)件目/
re3 = /検索にかかった時間(\d\.\d\d)秒/
File.foreach(keyword_file) do |kw|
File.foreach(suffix_file) do |sf|
w3m = IO.popen("w3m -dump '
http://www.google.com/search?ie=euc-jp&oe=euc-jp&hl=ja&meta=lr=lang_ja&num=10&q=#{kw}+#{sf} '","r")
pat=/件中/
w3m.each_line do |line|
if pat =~ line
re.match(line)
key = $1
re2.match(line)
cnt,from,to = $1,$2,$3
re3.match(line)
second = $1
printf("%16s %10s => %5d件 %10s 秒 \n",kw.chop,sf.chop,cnt,second)
end
end
w3m.close
end
end
107 :
106 :02/07/31 11:52 ID:p4UQxNW6
>>106 において
w3mでパイプしている奴を
Net::HTTPで高速化させたいですが、正規表現で
引っかかります。
require 'net/http'
host = 'www.google.co.jp'
path = '/search?num=10&lr=lang_ja&q=hoge'
http = Net::HTTP.new(host)
page=http.get(path)[1].delete("\n")
print page.scan(%r|ffffff><b>日本語.*秒</font>|i)[0].gsub(%r|<.*?>|,'')
scanの部分を間違っていますか?
なお、ほしい部分の周辺は
以下のようなHTMLです。
<b>日本語</b>のページから<b>hoge</b>を検索しました。 </font></td>
<td bgcolor=#3366cc align=right nowrap>
<font size=-1 color=#ffffff>約<b>37,500</b>件中<b>1</b> - <b>10</b>件目 ・検索にかかった時間<b>0.54</b>秒</font></td></tr></table>
108 :
106 :02/07/31 11:55 ID:p4UQxNW6
途切れてました。 ------------------------------ <table width=100% border=0 cellpa dding=1 cellspacing=0 bgcolor=#3366cc><tr><td bgcolor=#3366cc nowrap><font size=-1 color=#ffffff> <b>日本語</b>のページから<b>hoge</b>を検索しました。 </font></td> <td bgcolor=#3366cc align=right nowrap> <font size=-1 color=#ffffff>約<b>37,500</b>件中<b>1</b> - <b>10</b>件目 ・検索にかかった時間<b>0.54</b>秒</font></td></tr></table> --------------------------- #!/usr/bin/env ruby require 'net/http' host = 'www.google.co.jp' path = '/search?num=10&lr=lang_ja&q=hoge' http = Net::HTTP.new(host) page=http.get(path)[1].delete("\n") print page.scan(%r|ffffff><b>日本語.*秒</font>|i)[0].gsub(%r|<.*?>|,'')
うちはそのコードでうまくいくよ? ---- $ ruby 106.rb ffffff>日本語のページからhogeを検索しました。 約34,800件中1 - 10件目 ・検索にかかった時間0.07秒 ---- 後は切ったり張ったりすればいいんじゃないかなあ。 あ、もしかして日本語コードがおかしいってことない?$KCODE を設定すれ。
>>109 正規表現リテラルを使ってるから、#!/usr/bin/env ruby -Keとするか、eオプ
ションをつけてやるかしないといけないと思われ。
112 :
nobodyさん :02/08/04 22:52 ID:KEtgQdUN
あの、、、単発質問っすけど。。。しかも既出っぽい。 erubyで現在処理しているファイル名を出力するのって、 どうやればいいんでしょうか? 対象のerubyファイルに<%print $0%> と記述してもダメで、往生しております。 mod_ruby-0.9.7-0vl2、eruby-0.9.7-0vl1、ruby-1.6.7-0vl5 OSはVineLinuxっていう環境です。
113 :
nobodyさん :02/08/05 01:04 ID:gkrXoXeM
質問 erubyを使うことによって rubyのある機能が使えない なんていうことはありますか?
>>112 とりあえずmod_rubyが目的を達してくれました。
<%print Apache.request.filename%>
ついでにファイルをナニした時刻とかは
<%print File.atime(Apache.request.filename.untaint)%>
faqに書いてあるっすね。。。
>>113 メーリングリストでたまに話題になるっす
るびきちのツール
http://www.ruby-lang.org/~rubikitch/computer/myruby/w3mclient/ を使って、
IEからgetメソッドでurlをVMware内のアパッチに送り、Redhatのw3mにIEが表示中のページを開かせるスクリプトを書いてます。
アパッチ素人なので、cgiから別プロセスを起動させれません。で、cgiそのものにexecさせるてもこれまたエラーになります。
どこがおかしいのでしょうか?見てください。
% cat w3mclient.cgi
#!/usr/bin/ruby -w
DEFAULT_WINDOW = "w3m"
print "Content-type: text/html\r\n\r\n"
puts "<html><head><title>test.rb</title></head><body><pre><h2>REQUEST</h2>"
require "cgi-lib"
input = CGI.new
# テスト用
#url='
http://localhost/ '
url = input["url"]
print "#{url}が妥当ではない。<BR>" if url == ""
puts "OK!<BR>"
print "<html><body>inputdata = #{url}</body></html>"
string = "U#{url}^M"
#return 0
if string.empty?
$stderr.puts "must be one argument!"
exit 1
else
cmds = [ "select #{DEFAULT_WINDOW}", "stuff #{string}" ]
cmds << "other"
exec "screen", "-X", "eval", *cmds
end
117 :
116 :02/08/09 19:32 ID:???
予め、screenでw3mを起動して実験してくり。
url='
http://localhost/ '
#url = input["url"]
として、コマンドラインからだとうまくいくのに.....
>>116 CGIだとsafeモードになっててexecできないとかじゃ?
url = input["url"].untaint
でどうよ。
119 :
nobodyさん :02/08/21 14:58 ID:zHeqvt2W
データの保存手段としてPstoreとcsvどっちがいいの?? Pstoreは一気にダンプできるけど、データがでかくなると遅いんでない?? 他から読めないし。 csvは細かい制御ができるけどめんどいし。 オブジェクト指向の利点を生かすならならPstoreかなぁ。
120 :
nobodyさん :02/08/21 14:59 ID:zHeqvt2W
gifcat.rbってないの??
>>119 CGIでPStoreとcsvの速度的の差ってそんなに気になるかなあ?
50〜100個のオブジェクトから成る木構造をした
オブジェクトをPStoreで保存するスクリプトを書いたことがあるけど、
速度的な問題はあまりなかった。
csvは単純なデータ構造なら良いけど、
こういうものを保存しようとすると、かなり手間がかかるので、
csvが細かい制御に向くということには同意できない。
PStoreの問題は保存形式がバイナリで他から参照できないこと、
Marshalのバージョンによって互換性がなくなることの2点。
キャッシュに使う場合などにはPStoreは便利だが、
きちんと使いどころ決めないと、ひどい目に遭う。
122 :
nobodyさん :02/08/27 12:00 ID:+xL6Nd0D
POSTメソッドでCGIを呼び出すサイトに GETメソッドでキーワードを渡すようなCGIを仲介させたいのですが、 可能でしょうか? 味の素のサイトのようなものをブラウザのgetメソッドから簡単に 呼び出したいのれす
126 :
nobodyさん :02/09/06 23:04 ID:4WN6nHTU
127 :
nobodyさん :02/09/07 12:02 ID:/XosvvbD
てゆうか、いつのまにアムリタとcgikit合体した?
128 :
nobodyさん :02/09/09 03:11 ID:yJUi7eZX
129 :
:02/09/09 03:16 ID:OJG0XMU8
130 :
nobodyさん :02/09/12 10:56 ID:7yXLjx7b
eruby からw3m -dumpを呼び出して、特定の行をgrepさせたいのですが、 そんな複雑なこと、可能でしょうか。
>>130 そんなのより net/http 使え。
132 :
128 :02/09/17 02:42 ID:???
>>128 自己レスです。
WEBrickのMLの過去ログみて試行錯誤しながら解決しました。
133 :
はげ夫 :02/09/21 01:43 ID:C/seqkZ5
cgi.out{ CGI.pretty( cgi.html{ cgi.body{ cgi.form{ cgi.popup_menu("selLink",["#{value_array[0]}","#{key_array[0]}"],["#{value_array[1]}","#{key_array[1]}"], ["#{value_array[2]}","#{key_array[2]}"],["#{value_array[3]}","#{key_array[3]}"]) } } } ) }
134 :
はげ夫 :02/09/21 01:44 ID:C/seqkZ5
CGIにHTML出力させている以下のスクリプトですが、 もっと綺麗に書きたいです。 cgi.popup_menu("selLink",["#{value_array[0]}","#{key_array[0]}"],["#{value_array[1]}","#{key_array[1]}"], ["#{value_array[2]}","#{key_array[2]}"],["#{value_array[3]}","#{key_array[3]}"]) のところをイテレーターで処理したいのですが、どのような 書き方がかのうでしょか. なお、 while gets chomp value,key = split(/\s/) value_array.push value key_array.push key end てな感じで、arrayに格納してある値を使いたいです。
135 :
はげ夫 :02/09/21 02:24 ID:C/seqkZ5
はげ夫です。 予め、文字列を作っておいて、それを使うようにするため 以下のようにしました。 でも value_key=`mmm` がうまくいきません。原因わかる方いらしたら、アドバイスお願いします。 def mmm (1..9).each do |i| print "[\"value_array[#{i}], key_array[#{i}]\"]" print " , " end end value_key=`mmm` cgi.out{ CGI.pretty( cgi.html{ cgi.body{ cgi.form{ cgi.popup_menu("selLink", "#{value_key}") } } } ) }
>>135 何をしたいのか微妙に分からないが、`mmm`というのはmmmという外部コマンドを実行展開だよ。
やるなら、こんな感じでうまく行くかな?
なお、"#{hoge}"はhoge.to_sと同等のハズ。
a = []
4.times do |i|
a.push([value_array[i].to_s, key_array[i].to_s])
end
cgi.popup_menu("selLink", *a)
137 :
はげ夫です。 :02/09/21 16:31 ID:C/seqkZ5
>>136 神!!!!!
-----
求めていたことが出来ました。
--HageO
138 :
nobodyさん :02/09/23 18:32 ID:es3jINy/
rubyのホームページにあるマニュアル に使われているCGIってどこでインストールできますか? どこにあるのでしょうか?
140 :
138 :02/09/25 11:59 ID:XZD0oBt/
xrea.com ruby使えるね。 他にruby使えるFreeSpace知ってるかい?
142 :
eruby ア :02/09/26 06:22 ID:C/mv8j8O
<html><head> <TITLE>hogehoge</TITLE> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis"> <script language=JScript defer> function setvalue() { str = clipboardData.getData("Text"); document.f.<%=query%> = str; document.f.submit(); } </script></head> <body onload="setvalue();"> <% action_url=ARGV.shift %> <form name=f method=post action="<%= action_url%>"> <% query=ARGV.shift %> <% ARGV.each do | name, value| %> <input type="HIDDEN" NAME=<%=name%> VALUE=<%=value%>> <% end %> <input type="text" name=<%=query %> style="visibility:hidden"> </form></body>
143 :
eruby ア :02/09/26 06:37 ID:C/mv8j8O
makeform.rb METHOD ACTION QUERY_NAME NAME1 VALUE1 ……
コマンドラインから
% makeform.rb get www.google.co.jp/search q lr lang_ja
のように実行するか
/var/www/cgi-bin/eruby /var/www/html/makeform.rhtml post
http://www.ajinomoto.com/A-Kitchen/cnavi/condition/index.asp \
txt_freeword hid_hyouji_ku 2 hid_log_menu_title_ku R
のように実行すると、クリップボードを検索キーとしたフォームを自動submit
してくれるHTMLファイルを大量に作りたくなったのですが、
うまく動きません。142 みたいなHTMLが簡単に作れればなというイメージです。
一体、erubyかcgiかどちらがいいのでしょか。
もう少し頑張ってみますが……。
144 :
nobodyさん :02/09/28 16:21 ID:9nQPxW7p
age
145 :
nobodyさん :02/10/01 21:36 ID:WSHJwoNi
mod_rubyについての質問です 現在cgi-bin下に置いて正常に動作してるrubyCGIのhoge2が mod_rubyで動かそうとするとエラーになってしまいます apacheのerrorlogでは /usr/lib/hoge/hoge1.rb:9: uninitialized constant TOARU_DIR (NameError) from /home/httpd/cgi-bin/hoge2:8:in `require' from /home/httpd/cgi-bin/hoge2:8 from /usr/lib/ruby/1.6/apache/ruby-run.rb:70:in `load' from /usr/lib/ruby/1.6/apache/ruby-run.rb:70:in `handler' from ruby:0 という感じです hoge2内でhoge1.rbをrequireした時が問題みたいですが hoge2内で最初にTOARU_DIRは定義されてます んでhoge1.rbではそのままTOARU_DIRを使ってるわけですが mod_rubyではこの使い方では駄目なんでしょうか? ruby 1.6.7 mod_ruby 0.9.8 です
>>145 mod_rubyは詳しく知らないけど、requireするものはライブラリとして完結していないとマズイと思う。
少なくとも呼ばれ方によって、エラーがでるような作りではマズイかと。
依存関係が相互だとややこしいから。(なるべく、一方から一方って言う作りの法がメンテがしやすいでしょ。)
mod_rubyではrequireはかなり特殊な動きをするみたいなのでその影響だと思う。
一度requireされると、Apacheを再起動するまでrequireされないとか、、、(時々されるらしいけど)
実際requireしているのはmod_ruby自体であって、requireが書かれているスクリプトではないのかな?
loadにしてみたら、うまくいくかもしれない。
それとも、グローバル変数を使うと動くかも知れない。
でも、作りを変えた方がいいでしょう。たぶん。
147 :
144 :02/10/03 21:02 ID:???
>>146 どうもです
結局hoge1.rb内でもTOARU_DIRを書いたら
一応動作してるっぽくなりました
でもキャッシュが効いてるとかの関係で
前のデータが表示されたりして正常動作は無理みたいです
rubyをまだあまり勉強してないので
ライブラリの書き方ってのは良くわからない
というかw3mlっていうスクリプトなんですが
http://www.tmtm.org/ruby/w3ml/ 中身見てもサッパリで
直すにも知識がない…
つーわけで
グローバル変数などについても調べてみます
ありがとうございました
すまそ 145でした
149 :
るびきち :02/10/07 13:01 ID:eeOopUgI
>>151 るびきち様へ、
rd, rtシリーズ使わせてもらってます。ありがとござます。
TeXへの変換もTodoに入ってましたが、どうなってますか。
もうだめぽ
>>154 あれは別の「るびきち」だYo
漏れは2chでしか荒らさない
いつの間にここの名無しは"るびきち"になったんだ・・・
Ruby板を作ってもらって、名無しは"るびきち"にしよう!
よかった るびきち 2001/01/10 [20時39分28秒] 掲示板巡回スクリプトを使ってる身には時計は死活問題なのです(^^;; またかい るびきち 2001/01/10 [01時21分42秒] 時計遅れてるぞ!ってここの管理人に言ってもしょうがないんだよね(苦笑) ちうことは るびきち 2001/01/02 [02時18分13秒] 日付が違うだけかな。 3日過去に戻ったってことだね、candyは(笑) タイムスリップ(≧m≦)プッ♪ 時計狂ってるぞ。 るびきち 2001/01/02 [02時15分45秒] 時計が狂ってます。現在 Fri Jan 5 02:15:33 JST 2001。 あれれ るびきち 2000/11/28 [08時32分41秒] 時計が「一日」ずれてません? 時計 るびきち 2000/11/21 [22時38分36秒] candyの時計1時間ほど遅れてます!!!!! 下のカキコ消してください。 rubikitch 2000/11/21 [22時36分32秒] candy、ホサ・D蕁授償エヨト・謄襦‡Ε法▲蓮◆◆▲漫▲院▲・・・eM#ス
るびきちって、まだRuby界で活動してんの? 追い出されたものだとばかり..............^^
どうでもいいよ。そんなことよりRubyでCGIの話しをしよう。 Drb/Erbを作った咳さんの本「dRubyによる分散オブジェクトプログラミング」 買った。最後の一章はDivの説明で、CGI::sessionの使い方がのってて 面白かったよ。
Rubyよりrubikitchの方が面白い
162 :
nobodyさん :02/10/19 01:01 ID:ETzV66Aw
粘着UZEEEE!! Ruby で weblog やるなら何がいいのかな?
目でまつもと本読むか、xyzzyのruby-modeからinfoひいてる。
168 :
nobodyさん :02/10/28 09:17 ID:ORWKLNV5
-‐- 、 , ' /V ヽ ヽ ! i iノノ)ノリ)〉 ! ♪ / ̄ ̄ ̄ ̄ ̄ || |i ´Д`)!リ < るびきち〜 || /´LX」\| \_____ ||<__/<∧>i_/ヽ |/ ス, || / \ \_ / / / || | | V、⊂´ 〔,ァ,》/j/ || | リ く__ _||_! ! ̄| | ! |i / ! | (((())) /`‐!-‐| ( ´Д`)キモイヨー! / /! | ( つ つ 〈 f《 ! f|L 人 ヽ \_ノ |__) し(_)
169 :
nobodyさん :02/10/28 10:00 ID:eeSwvoos
|⌒⌒::::::::::::::::::::::::::..ヽ、 | :::..ヽ | |; | | | ,/|;; |ヽ__,yr''"~";、 | |; | | | / | ;| |人illl^lll|゙l!; |ノ___ノ__,ノ__,ノノノ ノ___ノ__ノl| lll゙ ,;ll゙.,l|;;´ |-=・=- -=・=-'.::i ゙!iフア゙リリノ |::... __ .::::::::i ゙゙^''''″ |::::.. / | ::i' るびきち大好き! |::::::::... / | / |:::::::::::.. ̄ ̄ ̄ ̄ ...:/ / ̄ ̄ ̄ ̄ ヽ | | \_____ |
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ /\ /\ < ほれ食え / \ / \ | / \_/ \ \_______ / \ / ヽ___ ___ / / ヽ__/ \ / ゙Y" \ | │ / / \ | 丶/ / \ \ / ̄ ̄ ̄ ̄) * ( ̄ ̄ ̄ ̄) ヽ_____| ─< |\ >─ ( | ) / (|ミ;\ ( ) ヽ  ̄ ̄) /(___人|,iミ'=;\ (  ̄ ̄ ) /" ̄ ̄ ̄ ̄ / 《v厂リiy\  ̄ ̄ ̄ ̄\ / / ゙|,/'' v:,,、.¨)z,_ \
171 :
るびきち :02/11/12 00:59 ID:4RUh699P
172 :
名無しさん@Emacs :02/12/17 08:48 ID:M9UVeCJF
2ch の AA は Shift_JIS(MS932?)じゃないと時々化ける文字とか あるんだけど、Perl で Shift_JIS 使うのはしんどい。正規表現とか。 だから Ruby やろうと思った。 というわけ。
うわっ、ごめんなさい。 間違ってしまいました
174 :
木田 :02/12/18 00:11 ID:???
誤爆? それともマルチ?
176 :
nobodyさん :03/01/06 19:04 ID:abYGXX0G
少し調べた限りでは無理のようですが、一応聞いてみます。 サーバーが Ruby には対応していないと言っているところで、 スペースに十分な余裕がある場合、 自分で Ruby を入れて CGI 用に使うことができるでしょうか? もしできるとしたら、その方法は? 私は Windows を使っています。
177 :
nobodyさん :03/01/06 19:49 ID:kYnbuqVv
シェルを開放してるならなんとかなるが 多分そうでないので無理
179 :
176 :03/01/07 01:30 ID:???
>177, 178 やっぱ、無理っぽいですね。 レスありがとうございました。
RubyってPHPやPerlより遥かに書きやすくて保守も楽なのに、 なんでみんなPerlやPHPばっかり使おうとしてんの? もう呆れるわ。どうにかしてくれ。
Array#eachってインデックスの順番通りに評価していくの? 順番が変わることはありうる?
<B>ruby</B><BR> & space
>>180 まだまだマイナーって事が原因だと思う。
少しずつ広めるしかないかと。
>>181 ない。必ずインデックス順。
でも、Hash#eachは順不定。
184 :
nobodyさん :03/01/08 19:32 ID:7OFYGy2+
よくわからんけど、 OOでCGI書いてもインスタンスが1セッションで死んじゃうと思うんだけどどうなん? せっかく生成しても全然使わないプロパティーとかメソッドがあったりしないの?
そんな当たり前のこと言って何が言いたいんだ?
>>183 Rubyの高度な資格試験が作られるとか、何か大きな力が
ないと永久にマイナーのままの気がするよ。
187 :
nobodyさん :03/01/08 23:41 ID:nce8HQbQ
>>187 別に好きって訳じゃないけどさ・・・
ちょっと気になる存在?
このスレは青春真っ只中ですね。
〉〉184
>>188 さん、あんたのこと気になるってさ。
告っちゃいなよ。
192 :
nobodyさん :03/01/09 19:00 ID:lEC2F1+p
パスで悩んでいます。 Rubyが入っている鯖を使っているのですが、amritaは入ってないようです。 それで、cgiディレクトリの下にamritaディレクトリを作って、 ファイルをコピーしました。 ですが、cgiディレクトリ中の、tako.cgiで require './amrita/template'をすると、 Script Error が出てしまいます。 template.rbを見てみると、この中でも、 require 'amrita/node.rb' などしているので、 これが原因だろうと思っています。 こういう場合、どういう設定をするとうまく行くのでしょうか? tako.cgiに $: << File.expand_path(".")を付け加える、 amritaディレクトリのスクリプトのamrita/を取り除く、 などしてみましたが駄目でした。 cgi/tako.cgi require './amrita/template' cgi/amrita/template.rb require 'amrita/node.rb' ....
>>191 え? どっしよかな〜
Ruby初心者だけど手取り足取り教えてもらえるかな♥
>>192 amritaディレクトリが入っているディレクトリへの
絶対パスを$:に入れるのが一番いいかと。
/virtual/pokemon/lib/ruby/amrita
とあるとすれば、こんな感じ。
$: << "/virtual/pokemon/lib/ruby"
require "amrita/template"
相対パスでもいいけど、
カレントディレクトリがどこであるかに注意しなくちゃいけない。
たぶん、これでうまく逝くと思うけど…。
195 :
192 :03/01/10 06:19 ID:???
できました! amritaはstrscan.rbが必要で、strscan.rbはrscan.rbが必要だ、 というところではまっていました。
Rubyでお勧めの掲示板スクリプdありますか?
197 :
山崎渉 :03/01/15 13:35 ID:???
(^^)
199 :
nobodyさん :03/01/23 19:20 ID:vbxMrxnN
rubyで文字コードの変換のしかがたわかりません。 eucでかかれている文字を、jisに変換するには どうすればできるのでしょうか?
201 :
nobodyさん :03/01/28 17:39 ID:zukHx973
RubyでもパターンマッチはEUCに変換したほうがいいですか?
>>201 eucである必要はないけどeucかsjisかutf8に揃えないと書きにくいと思う。
rubyでもsjisだと特殊文字含んでたらだめなんじゃなかったっけ?
ruby -Ks のように漢字コードをきちんと指定すれば問題ないよ。
>>203 特殊文字って何よ、特殊文字って?
@みたいにマックでは読めない機種依存文字のこと?
それだとShift_JIS自体の問題になると思うんだけど…。
(ただのhtmlでも問題起きるわけだし…)
メタ文字のことだろ
207 :
nobodyさん :03/02/14 11:45 ID:S51j/Le3
CGIKitに興味があります。 amritaについてきたサンプルを実行してみたのですが、 どういう時に使うと嬉しいのかが、いまいちぴんと来ません。 こう使うと便利だっ、という例ありますか。
ある程度アプリが複雑になるときかな。もしくはeRubyだと辛いとき、など。 フォームから送られたデータを勝手に処理してくれるのは楽。 まだぽこぽこバグがあるみたいだけど。 ただ、フレームワークだから慣れるのに時間がかかると思う。 コンポーネント指向のWebアプリ開発も同じく。 cgi.rbやeRubyに特に不満がなければ無理に使うこともないかと。
209 :
207 :03/02/17 05:27 ID:???
>208 レスどうも。 どうやら、今の私には必要ないようです。
Ruby、試してみたいけど使える(入手できる)CGIスクリプトが少なすぎ。 Perl,PHP→Ruby移植をやってほすぃ。
>>210 ショボイのしか作れなくて悪かったね!
つか、言語自体のスタイルが違うから移植するより、
新しく構築した方が早いし、メンテが楽。
>>210 何を移植して欲しいのよ?
と、聞くだけ聞いてみるテスト。
213 :
nobodyさん :03/02/28 14:15 ID:Zmsc8h96
Amrita 1.0.2だと動くスクリプトが、1.8.1だと変になる。 なんかidがそのままHTMLに出力されてしまう。 どんな原因が考えられる?
PHPでつくったスクリプトをrubyで書き直しているんですが、 FLASHの画像サイズを取得できなくて困っています。 rubyで扱える方法ってあります?
freemovieも新しく作るだけみたいな、読み違えていなければですが。 perlかPHPを読むしかないか...
217 :
nobodyさん :03/03/11 11:05 ID:1APakuZe
mod_rubyを使ってます。 下記のように書いても、シグナルを捕らえられないようです。 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
218 :
217 :03/03/11 14:11 ID:???
いろいろ試してみましたが、mod_rubyではブラウザが読み込みを 中断してもシグナルは飛んでこないようです。
219 :
nobodyさん :03/03/13 14:09 ID:ZqR/jIti
220 :
山崎渉 :03/03/13 16:55 ID:???
(^^)
>>217 mod_ruby環境下だと$stdoutがIOじゃなくApache::Requestに
なるのでprintしてもSIGPIPEは発生しません。
$stdout.connection.aborted?でクライアントが接続しているか調べられる。
if $stdout.connection.aborted?
STDERR.puts "aborted"
end
222 :
nobodyさん :03/03/15 09:09 ID:77D9QknZ
保守
224 :
217 :03/03/15 14:43 ID:???
>>211 > なるのでprintしてもSIGPIPEは発生しません。
そうですか。
クライアントが読み込みを中断して、処理が中断すると
まずいので、mod_rubyの仕様はむしろ都合がよいです。
> $stdout.connection.aborted?でクライアントが接続しているか調べられる。
勉強になります。
225 :
nobodyさん :03/03/18 11:02 ID:s+XgHl7g
rubyって鯖負担が大きいから普及しないんかな?phpは鯖負担軽いから最近急速に普及しとるが。
mod_ruby
PHPはコレデモカッ!てくらいライブラリのラッパがあるのがウリだと思う 全く工夫せずにそのままラップしてあるのも潔よい
mod_rubyな鯖ってグローバル変数を共有していたり、 一度requireしたらリセットできないなど、 レンタル鯖では使い辛いような気がしますが、 気のせい?
>229 ならmod_rubyを使わなければ良いのでは 寿命が長いから顧客向けじゃないと思う
2回以上ロードされることを念頭においたライブラリは多くないだろう
233 :
nobodyさん :03/04/11 04:13 ID:EmBndhA4
>>225 オブジェクト歯垢は、厨プログラマには使えないから普及しない気がする。
普通のプログラマには嬉しい言語なのにな。悲しい現実だよ。
ちと違う。 普通のプログラマが嬉しければ流行る。 なぜなら厨プログラマは上層の反応に素直に反応するから。 という事はRubyに何か痛い点がある。それはね・・・。 つづく。
>235 痛い点って???すげぇ気になる&age
237 :
山崎渉 :03/04/17 12:03 ID:???
(^^)
238 :
山崎渉 :03/04/20 06:26 ID:???
∧_∧ ( ^^ )< ぬるぽ(^^)
241 :
nobodyさん :03/05/04 07:47 ID:c2Xx7eHE
Amrita1.8.2、Cygwin でなく、mswin版Rubyで使えるようになりませんか? テンプレートコンパイラ機能を使いたいです。
multipartなFORMを使ってファイルをアップするCGI作っています ファイル名を空にして送信したときに Tempファイルが残ったままになることが、たまにあるんだがどうして?
自分用語で言われても、、、ね?
>>241 amrita/ext 配下が VC++ でコンパイル通らないってこと?
エラーメッセージは?
>244 Warning がいくつか出たけど、とりあえずコンパイルできました。
246 :
nobodyさん :03/05/07 10:26 ID:QZ929xpM
Hikiでフォント変えられるの?
フォント? テーマ機能つかって、css で制御するんじゃない?
test<font face="Arial">test</font> ってな感じに、部分的にフォントを変えたいのだけど、 タグを使えるような抜け道が用意されているのかなと思って。
>>248 フォントを指定するプラグインを作ってください。
250 :
山崎渉 :03/05/22 02:04 ID:???
━―━―━―━―━―━―━―━―━[JR山崎駅(^^)]━―━―━―━―━―━―━―━―━―
251 :
山崎渉 :03/05/28 17:18 ID:???
∧_∧ ピュ.ー ( ^^ ) <これからも僕を応援して下さいね(^^)。 =〔~∪ ̄ ̄〕 = ◎――◎ 山崎渉
∧_∧ ピュ.ー ( ^^ ) <これからも僕を応援して下さいね(^^)。 =〔~∪ ̄ ̄〕 = ◎――◎ rubikitch
253 :
nobodyさん :03/06/17 10:18 ID:CDKrfOSa
Rubyでオブジェクト指向の勉強に最適なサイトはないですか?
あぼーん
256 :
nobodyさん :03/06/19 21:56 ID:c0HjpDNQ
IPからホスト名の取得と、ホスト名からIPの取得 どちらも行うスクリプトを書く時、 どのライブラリをrequireしてどのメソッドを使うのが効率がいいですか?
cgi.rbを使いたくないので、フォームから取得するモジュールを書いてみたのですが、 足りないノウハウ等がありましたら、どうかご教授ください。 以下にコードを挙げます。 ちなみに、複数選択可能なselectは考慮してませんし、使う気がございません。
259 :
258 :03/06/20 20:12 ID:???
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
260 :
258 :03/06/20 20:12 ID:???
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
261 :
258 :03/06/20 20:12 ID:???
def CGITool.getMultipartData $stdin.binmode $stdin.read(ENV['CONTENT_LENGTH'].to_i) end end
あぼーん
究極はBASICだよ
265 :
258 :03/06/21 23:32 ID:???
うっ‥それでは議論のノウハウをご教授していただきたいものです‥ それはさておき、 危惧していることは、 1.windows9xでgetMultipartData()の内容は問題ないのであろうか?また問題あるのであれば、どうすべきか? 2.getFormMultipart()のarray.eachの内容で想定していないデータが来るケースがあるであろうか? です。大丈夫でしょうか‥?
266 :
nobodyさん :03/06/25 00:21 ID:xZOuwnMz
すいません。perlから、Rubyに挑戦しているものです。 perlスクリプトの区別を付けるため、rubyのスクリプトは.rbとしているのですが、アパッチのほうは AddHandler cgi-script .rb こうやっています。なにかまずいことはありますでしょうか? あと、rubyのモジュールとはいったいどういうものなのでしょうか?
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
>>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はその例。
269 :
265 :03/06/28 17:58 ID:t6ndrw6W
>>268 なるほど、、まぁ、はじめたばっかりの私にとってはクラスとかあんまりあからないので、大丈夫かなぁ・・・
ありがとうございました。
270 :
nobodyさん :03/06/28 17:59 ID:t6ndrw6W
名前欄の数字みすった。スマソ
271 :
nobodyさん :03/07/08 12:15 ID: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 でアップロードしたファイルのデータが取得できるのでしょうか?
秋風が吹く頃に勉強する予定なのでageといてやる。
__∧_∧_ |( ^^ )| <寝るぽ(^^) |\⌒⌒⌒\ \ |⌒⌒⌒~| 山崎渉 ~ ̄ ̄ ̄ ̄
274 :
nobodyさん :03/07/20 18:39 ID:MTCslCJP
mod_ruby+eruby。 servlet+JSPより好きなので、age。
ruby-listでerbの改造について盛り上がってるね。これで速さがphp並になれば……。
私は % のエスケープも<% # %>も使わないので、 今回の流れで色々と複雑な事情があるのだなあと知りました。 陰ながら応援sage。
俺も使わないなあ。規模が違うってのもあるんだろうけど。 <% か <%= のどっちかだけ。
278 :
nobodyさん :03/07/26 01:58 ID:aoovL48q
初歩的な質問で申し訳ないんですが、 Rubyに標準で添付されているCGI.rbというライブラリでは、 タグを生成するときの大文字は変更できないんでしょうか? 最近ではxmlの関係もあって小文字で出力したいと思うんですが・・・ 例)大文字 → <HTML><H1> 小文字 → <html><h1>
あまり、調べてなくて申し訳ないんですが
RubyでPerlでいう↓のやつできませんか?
print << 'EOS';
<html>
<body>パパの特盛</body>
</html>
EOS
>>278 タグの内部だけ?相当むずかしいんじゃないの?
タグ内のデータとかは大文字のままじゃないといけないんでしょ?
例:<INPUT NAME=OOMOJI> ⇒ <input name=OOMOJI>
たぶん、それはないと思う。変換機能がついたHTMLエディタとかどぞ
>>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';
281 :
279 :03/07/26 03:16 ID:???
>>280 うわあぁああぁぁ!
いぃち文字消したらでぇきたぁー!
サンクス!
282 :
278 :03/07/27 00:09 ID:zQkWZE8h
>>279-280 ご教示ありがとうございました。
結局、cgi.rbの中身を解析し、何箇所か修正を加えることで、
目的を達成することができたみたいです。
283 :
278 :03/07/27 00:15 ID:zQkWZE8h
補足
>>280 さんの方法では、私の環境ではエラーになってしまいました。
cgi.rb suxx
>>284 CGI.pm がこの世に存在しなければあんなダメダメなライブラリにはならかったんじゃないかと想像。
narf のベータが取れるのを待つしか。
287 :
279 :03/07/27 17:47 ID:???
gsubで、引っかかった文字によって置き換える文字を変えたいのですが print "pl rb pl rb".gsub( /(pl|rb)/, ($1=='pl') ? 'Perl': 'Ruby') これだと ($1=='pl') がかならず false になってしまい、 Ruby Ruby Ruby Ruby になってしまいます なにゆえでしょう?
>>287 簡単に言うとドラクエの勇者に「ロト」って名前付けられないのと一緒だ。
289 :
279 :03/07/27 18:32 ID:???
>>288 勇者にロトと名づける裏技、見つかりました
print "pl rb pl rb".gsub(/pl|rb/) {|m|
m = (m=='pl')? 'Perl' : 'Ruby'
}
これでやったらできました。 |m| あたりが良くわからんけど。
ruby-lang.orgのgsubのリファレンスマニュアルみたらすぐ見つかりました。すみません
rubyの後方参照($1とか\1とか)はあんま柔軟なことできないみたいですね
ありがとうございました
>>289 > rubyの後方参照($1とか\1とか)はあんま柔軟なことできないみたいですね
下手な煽り文句ですね。
291 :
279 :03/07/28 00:29 ID:???
>>290 え?べつに煽ってはいませんよ
煽りに見えたならそれはすみません
>>289 puts "pl rb pl rb".gsub(/(pl|rb)/) { ($1 == 'pl') ? 'Perl' : 'Ruby' }
table = {'pl'=>'Perl', 'rb'=>'Ruby'} pattern = Regexp.compile(table.keys.join('|')) puts("pl rb pl rb".gsub(pattern){table[$&]})
294 :
279 :03/07/28 02:04 ID:???
>>292 そっちの方がカコイイ!!ありがとう
>>293 最適化されてしまった...
table.keys.join('|')って汎用的でおもしろいアイデアですね。ワラタ
おもしろいなRuby
> 294 キーが正規表現含むとおかしくなるから quoteしたほうがいい pattern = Regexp.compile(table.keys.collect {|key| Regexp.quote(key) }.join('|'))
296 :
279 :03/07/29 00:45 ID:???
>>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")
297 :
279 :03/07/29 00:53 ID:???
>検索でヒットするパターンが多いからちょっと連想配列は使えないかも。 検索速度がorでつなげるより速そうだから [<%][%>]=? なんてしてるんですが よく考えたらパターンは <%、%>、<%=、%>=、>%、%<、>%=、%<= の8通りだけだから連想配列の方が良いか まあいいや、ERBとかいうのを使おう...。スレ汚しすんまそん。ハァ
ちなみに erb は Ruby 1.8 からは標準添付だ。
>>295 それじゃ自分で正規表現を指定できないではないか
300 :
nobodyさん :03/07/29 23:02 ID:SXyppRH6
CGI::Sessionを用いてセッション管理をしようと思うのですが、 利用しなくなったセッションファイルを自動で消去することは できないんでしょうか? ある本をよんだら、CGI::Session.sweep()を使うと書いてあった のですが、エラーが出て使えません。
>>300 > ある本をよんだら、CGI::Session.sweep()を使うと書いてあった
sweepの定義はその本に書いあるのだと思われ。
利用しなくなったかどうかの判断基準は利用者によって異なる。
だから、一般的な方法は存在しない。
Rubikitiさん出版おめでとう。
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倍使うための本 魔道編
次は農道編キボンヌ
(⌒V⌒) │ ^ ^ │<これからも僕を応援して下さいね(^^)。 ⊂| |つ (_)(_) 山崎パン
eruby で エラーメッセージをブラウザに表示したいんだけど できません。 MLをみたら $DEBUG = true にするとありますが、そうしても変化がありません。。。 どうすればいいんですか?
Internal Server Error とかで eruby から何も返ってこないなら、 eruby 自体が起動されてないんじゃないの? サーバーの設定を確認した方がいいような。 サーバーのエラーログが見れるのならそこを見るべし。
308 :
nobodyさん :03/08/23 21:49 ID:Ba5Hz+Nk
erubyは動いているんですが、apacheのログを開きながらデバッグするのが 面倒くさいだけなんです。 作っている時だけブラウザにエラーを表示してくれると助かるんですが。 eruby + mod_ruby で使ってます。 手元に環境がないんでversionがわかんないんですが、どちらも最新のものだと思います。
生成したrubyコードが parse error になる場合はstdoutには何も返さん罠。 コマンドラインで実行してみれ。
>>313 ruby の parse error は apacheのログには表示されますので、
それをブラウザに表示できる設定がないかなと思ったんです。
stderrはerubyでは拾えないということですか?
parse error って拾えるのか?
つーかコマンドラインで表示されるエラーを なんでブラウザで見たいのかがさっぱり分からん
313 :
nobodyさん :03/08/24 06:34 ID:3TVF6Tbn
>312 CGIの引数渡すのがめんどくさいんだろ
314 :
312 :03/08/24 10:00 ID:???
>317 めんどくさいていうか、わかんないんです。 コマンドラインでPOSTデータやcookieデータを渡す方法が。
あぼーん
parse error になるかどうかと入力の有無は関係ないと思うのだが
317 :
312 :03/08/25 00:38 ID:???
別に parse errorばかりのことをいっているんじゃなくて、 例外が発生しても Internal server errorになるわけで。 できないんなら、できないでいいんだけど。 煽られるのって楽しいね。
おいおい、parse error以外の例外は大抵捕捉できるだろ つーか、311=312なの??
どれが
>>306 かいまいち分からんが、
実行時の例外は $DEBUG=true しとけばブラウザで確認できるはずだから
インタプリタがコンパイルできるかどうかだけはコマンドラインでeruby実行して
調べれっていわれてるんでしょ。
320 :
nobodyさん :03/08/25 14:17 ID:IWdWlewI
IISでeRubyって無理なのかな・・・
ISAPIにすればいけるんでない?
あれ、eRubyは昔はparse error もバッチリブラウザに出てたけど・・・ ソース丸見えになるのでデフォルトでこれは勘弁と思ったものだ。
>323 mod_ruby を外したらブラウザに表示できました。 mod_ruby + eruby だと表示できないようです。 -- mod_ruby 1.0.5 ruby 1.6.8 (2003-03-26) eRuby version 1.0.3
>>323 なるほど、と思ってソースのあたりをいろいろ探して見た
httpd.conf で
RubyRequire apache/eruby-run -> RubyRequire apache/eruby-debug
RubyHandler Apache::ERubyRun.instance -> RubyHandler Apache::ERubyDebug.instance
に変更したらparse error もブラウザに出た
しかし、HTTPサーバごとデバッグ環境にしなけりゃならんのだなあ・・・
テンプレートなら、amritaと言うライブラリもあるよ。
>>326 amritaは名前空間が判りづらいから嫌い。
328 :
nobodyさん :03/09/02 06:02 ID:jo93f+PB
rubyでCGIを書くにあたって、使ってるデザインパターンとかあります?
nora はどう?
330 :
nobodyさん :03/09/03 02:41 ID:6XWfASQR
HTML::Templateについて詳しいサイトないですか? html-template.rdだけじゃ、複雑なことしたいときどーすりゃいいか分からん
1.8.0にしてみた ENV[]から代入した文字列は変更不可だった とりあえずひっかかったのはいまのとここれだけ
freeze するようになったんだっけか。 変数にアサインしてもStringオブジェクト自体はかわらんからね。 dup すれ。
サンクス。dupで対応したけど Rubyの使用が最も少ないサーバ(ほとんどphpとPerl)を選んで 入れたのに、いきなり出たんでちょっと別のサーバに持ってくのは 慎重にならざるをえないな・・
334 :
nobodyさん :03/09/07 18:35 ID:90cSPk+W
コマンドラインからは動くCGI(HTMLを期待通り出力する) が、サーバから動かない時って、どんな可能性があるでしょうか? INTERNAL_SERVER_ERRORになってしまいます。 以下のことは確認しました。何か理由思いつかないでしょうか? 実行可能になっています。 そのディレクトリにwwwがファイルを作れるようになってます。 Apacheの設定でCGIを使えるようにしています。 #!/usr/local/bin/rubyを文頭に書いてます。 print "Content-type: text/html"はあります。
>>334 apacheのエラーログには何か出てない?
suEXEC関連のエラーなら、そっちのログも(ディレクトリがグループ書き込みできると実行できない)
336 :
334 :03/09/07 19:18 ID:90cSPk+W
>>335 やっと、できました!!
あーよかった。もうちょっとで一日が無駄になるところでした(^^;)
Apacheのログみてたら、book1~ に対してPermission deniedとか書いてあったので、
book1~を削除したら、動いてくれました。
PStoreの保存するファイルの名前がbook1で、コマンドラインから実行していた時に
book1やbook1~が作られていました。
book1の方は消していたのですが、book1~は気にせず残したままでした。
ありがとうございました。これからは、CGIが動かない時、Apacheのログもよむことにします。
ちなみに、他にでてたエラーのキーワードは、こんな感じです。
同じようなエラーが出た時に検索にかかるように、載せておきます。
Premature end of script headers: wook.cgi, referer:
http://localhost/cgi-bin/***.html /usr/local/lib/ruby/1.8/ftools.rb:23:in `initialize': Permission denied - ./book1~ (Errno::EACCES), referer:
http://localhost/cgi-bin/***.html /usr/local/lib/ruby/1.8/ftools.rb:23:in `open', referer:
http://localhost/cgi-bin/***.html from /usr/local/lib/ru
by/1.8/ftools.rb:23:in `syscopy', referer:
http://localhost/cgi-bin/***.html from /usr/local/lib/ruby/1.8/ftools.rb:43:in `copy', referer:
http://localhost/cgi-bin/***.html などでした。
ホントありがとうございました!
すんません URLエンコードってどうすればよいんでしょ‥?
>>337 require 'cgi'
CGI.escape
そういう意味じゃなくて?
まあcgi.rbの中見ればわかる
339 :
337 :03/09/08 01:57 ID:???
取り敢えず、エンコード部分は、CGI.escapeと同じにしてみたんだけど どうやら、IEが返してくるENV['HTTP_COOKIE']の値が想定していたのと違うみたい writeから始まって、値のみがカンマ区切りで入っているデータが返ってくるようで キーはどこいったの??って感じです 値を変えてみてしてみたのですが、返ってくるENV['HTTP_COOKIE']の値が変わらず‥ path指定を消して、再度値を変えてみてしてみたのですが、変わらず‥ 以下のメソッドの結果をそのままプリントしているのですが、なにかまずいでしょうか? def mkCookie(recipe, expiryDate = 30, path = nil) t = (Time.new.to_i + (expiryDate * 86400)).to_i t = Time.at(t).gmtime.strftime("%a, %d-%b-%Y %H:%M:%S GMT") text = '' recipe.each do |key, value| text << "Set-Cookie: #{escape(key)}=#{escape(value)}; expires=#{t};" + (path ? " path=#{path};" : '') + "\n" end text end ひょっとして、クッキー使用前に使ってた IE Powertoys Plus!のどこでもクッキーが???
340 :
337 :03/09/08 08:54 ID:???
おは 関係のあるCookieを全て削除したらどうやらスクリプト側で受け取るものは正常になっていました Cookieのファイルを見た感じの違いはキー・値のペアの区切りが改行になっているか「*」になっているかの違いでした どうしてそうなったのか、Cookieはなぜ上書きされなかったのかは不明‥
>>330 具体的になにがしたいんだ?
HTML::Templateでは、テンプレート側では複雑なことはできない。
複雑なこと(例えば複雑な条件式など)は、ぜんぶメインプログラム側で行う。
342 :
nobodyさん :03/09/09 01:02 ID:64dJm4LW
HTML::Templateってparam()にセットした配列がテンプレート内で 使われてないとエラーになんの?
>>342 どんなエラー?
実際のスクリプトとテンプレート、それにエラーメッセージをみせろ。
344 :
nobodyさん :03/09/09 10:23 ID:64dJm4LW
----hogehoge.rb---- templ = HTML::Template.new('hogehoge.html'); templ.param({'test'=>true}); array = [{'host'=>'book.2ch.net','board'=>'bizplus'}, {'host'=>'news5.2ch.net','board'=>'newsplus'}, {'host'=>'news4.2ch.net','board'=>'news'}]; templ.param({'array'=>array}); print(templ.output); ------------------ ----hogehoge.html---- <!begin:test> <!begin:array> HOST:<!var:host> BOARD:<!var:board> <!end:array> <!end:test> --------------------- ----error message---- ./template.rb:78:in `node': node array not found (ArgumentError) from ./template.rb:62:in `param' from ./template.rb:61:in `each' from ./template.rb:61:in `param' from ./template.rb:59:in `each' from ./template.rb:59:in `param' from ./hogehoge.rb:9 --------------------
346 :
345 :03/09/10 20:46 ID:???
>>344 おれの勘違いだったかも。
ループのまわりをif文で囲むと、どうもうまくいかないみたい。
表示する/しないをif文で制御するのではなく、
ループするデータがある/ないで表示を制御するとうまくいく。
------- sample.html ------
<TMPL_LOOP NAME="list">
HOST: <TMPL_VAR NAME="host">
BOARD: <TMPL_VAR NAME="board">
</TMPL_LOOP>
--------------------------
347 :
345 :03/09/10 20:47 ID:???
つづき。 -------- sample.rb ------- #!/usr/bin/ruby require 'html/template' test = true # or false list = [ { 'host' => 'book.2ch.net', 'board' => 'bizplus', }, { 'host' => 'news5.2ch.net', 'board' => 'newsplus', }, { 'host' => 'news4.2ch.net', 'board' => 'news', }, ] param = {} if test then param['list'] = list else param['list'] = [] end template = HTML::Template.new('filename' => 'sample.html') template.param(param) print template.output --------------------------
348 :
nobodyさん :03/09/10 21:02 ID:sTBsqDi+
html-template2の方に乗り換えようと思ったんですが そっちもループをifで囲めないんですか?
>>348 おれがためした限りではできなかった。
作者に聞いてみれば?日本人だから、日本語のメールでOKだよ。
>>348 直したから試してみて(20030911 version)
<TMPL_IF NAME="list">
<TMPL_LOOP NAME="list">
HOST: <TMPL_VAR NAME="host">
BOARD: <TMPL_VAR NAME="board">
</TMPL_LOOP>
</TMPL_IF>
こんなのも、ちゃんと動くようになった。
>>350 見事に直ってた。さすが作者。
-------- sample.html --------------
<TMPL_IF NAME="flag">
<TMPL_LOOP NAME="list">
HOST: <TMPL_VAR NAME="host">
BOARD: <TMPL_VAR NAME="board">
</TMPL_LOOP>
</TMPL_IF>
-----------------------------------
------------ sample.rb ------------
#!/usr/bin/ruby
require 'html/template'
list = [
{ 'host' => 'book.2ch.net', 'board' => 'bizplus', },
{ 'host' => 'news5.2ch.net', 'board' => 'newsplus', },
{ 'host' => 'news4.2ch.net', 'board' => 'news', },
]
param = {}
param['flag'] = true
param['list'] = list
template = HTML::Template.new('filename' => 'sample.html')
template.param(param)
print template.output;
-----------------------------------
実行結果:
HOST: book.2ch.net
BOARD: bizplus
HOST: news5.2ch.net
BOARD: newsplus
HOST: news4.2ch.net
BOARD: news
>>348 ちゃんと作者に感謝しとけよ。
自演ですかぁ〜?
>>354 もちろんです。あたりまえじゃないですか。
素早い対応を印象付けるために、色々仕込んでるんですよ。
これでも。
cgikitってやつで作ってるんだけど、つらいね。 ページあたりにオブジェクトを割り当てるってのはまどころっこしいだけ。 (これはWebObject / Struts あたりの方法) eRubyやPHPのようにページとロジックを直接結びつけるアプローチが どれだけ正しいのかということがわかる。(MVCは向かないね)
357 :
nobodyさん :03/09/15 08:47 ID:4+LfvYPm
1ページ/1オブジェクト っていうアプローチは、 amrita のように出力するためだけにあるものならいいけど、 値の受け取り、処理、までやるとなると、複雑さが増すだけ。 むしろ、1処理/1オブジェクトというアプローチをとるべきだ。 ページの抽象化なんて Hash オブジェクトで十分
1 処理/ 1 オブジェクトっていうのは、純粋なServlet のアプローチか。
>>356 eRubyやPHPではロジックとビューとが分離できないじゃん。
友達いないやつなら一人でロジックとビューをやるしかないけど
そうでないなら分担して作業したほうがいいよ。
>>360 eRubyやPHPでロジックとビュー分離できますよ。
多くの場合、あえて分離しないだけで。
>>361 それ、参考になるようなドキュメントってありますか?
>>363 みたけど、専用のフレームワークじゃん。それはずるいだろ。
そんなの持ち出していいんなら、なんだってロジックとビューの分離は可能だよ。
逆にいえば、そういうのを持ち出さないと分離できないってことじゃないか?
#まあPHPでは include() 使えば分離できるんだけどね。
つーか、もとの発言
>>356 では、
> eRubyやPHPのようにページとロジックを直接結びつけるアプローチが
> どれだけ正しいのかということがわかる。(MVCは向かないね)
なんてことをいってたので、それは違うだろ!というツッコミで
「ロジックとビューの分離」をあげてみた。
文章が悪かったかもしれんが、分離ができる/できないという話よりも、
分離をすべきか否かという話をしたい。
おれは分離したい。そのための手段として、CGIKitはいいと思う。
365 :
nobodyさん :03/09/19 20:30 ID:Z56dowS1
<TMPL_LOOP NAME='list1'> <TMPL_VAR NAME='hoge'> <TMPL_VAR NAME='foo'> </TMPL_LOOP> <TMPL_LOOP NAME='list2'> <TMPL_VAR NAME='hoge'> <TMPL_VAR NAME='bar'> </TMPL_LOOP> ってなった場合、 list1=[{'hoge'=>a,'foo'=>b1},{'hoge'=>a,'foo'=>b2},...] list2=[{'hoge'=>a,'bar'=>c1},{'hoge'=>a,'bar'=>c2},...] template.param({'list1'=>list1,'list2'=>list2}) みたいに配列の全要素にhogeを定義しないといけないんですか?
>>364 > 分離をすべきか否かという話をしたい。
どれを選ぶかは目的、規模、開発形態によるんじゃねーの?
(0) コードにHTMLを埋め込む
(1) HTMLを抽象化する(CGI::Html*)
(2) HTMLにコードを埋め込む(eruby)
(3) 別々に書く(amrita)
(4) 複数のセッションに対応する(div)
(3)はすごく良さげに見えるが、ID属性を利用するツールを
使ってるデザイナさんとファイルをやりとりする場合は
そのツールの挙動をよく知る必要がある。
PHP慣れしたデザイナさんと組む場合は(2)だと話がはやい。
(1)は画面内を部品化する場合に割と良いことがある。
別の例だと、Javascriptでサイズ変更不能な窓にする場合、
後からサイズの仕様が変わるのに備えるならprettyprintを
使って(0)でレイアウトを組むとか。
>>365 param["hoge"]が未定義だとnilが返ってくるから
IFで判定できるよ。
<TMPL_IF NAME='hoge'>
<TMPL_VAR NAME='hoge'>
<TMPL_ELSE>
hogeなし
</TMPL_IF>
368 :
nobodyさん :03/09/20 13:46 ID:YAOMW6mt
---hoge.html--- <TMPL_LOOP NAME='list'> HOGE:<TMPL_VAR NAME='hoge'> PIYO:<TMPL_VAR NAME='piyo'> </TMPL_LOOP> --------------- #!/usr/bin/env ruby require 'html/template' template=HTML::Template.new('filename'=>'hoge.html') #template.param({'hoge'=>'x'}) #list=[{'piyo'=>'a'},{'piyo'=>'b'},{'piyo'=>'c'}] list=[{'piyo'=>'a','hoge'=>'x'},{'piyo'=>'b','hoge'=>'x'},{'piyo'=>'c','hoge'=>'x'}] template.param({'list'=>list}) print(template.output) ↑はコメント外して6行目をコメントにするとエラーになります。 ---- error ---- (eval):10:in `<<': failed to convert nil into String (TypeError) from (eval):10:in `initialize' from (eval):8:in `each' from (eval):8:in `initialize' from (eval):1:in `call' from ./html/template.rb:67:in `output' from ./hoge.rb:8 --------------- 'hoge'は'piyo'と同じ階層で定義しないといけないのですか?
369 :
nobodyさん :03/09/20 18:41 ID:4MmeVqhG
Linux上でRuby走らせてるんですが、 ファイルオープンして、文字列を書き込むとき、SJISで書き込むにはどうしたらいいでしょうか?
>>369 君はRubyのIOをPerlIOか何かのように考えているのかね。
Shift_JISを書き込みたきゃNKFなりIconvなりで変換して書き込みたまえ。
371 :
nobodyさん :03/09/20 18:52 ID:4MmeVqhG
>>368 >'hoge'は'piyo'と同じ階層で定義しないといけないのですか?
基本的にはそうです。
内部的には
out << param['piyo']
out << param['hoge']
という処理なので
Hashのデフォルト値を指定するという手もあります。
Hash+Arrayなインターフェースを持った親をたどれるツリーのようなparamを作ってやれば上位階層の
'hoge'を取ってくるとかもできるでしょう。
あげ.
rubi
Rubyがしょぼいレンタルサバでも普及すれば、 おれもCGIスクリプト配布するのにな。
378 :
nobodyさん :03/09/28 01:23 ID:CG0BaKAB
Perlにとって変わると、いろいろな雑誌で数年前から言われ続けているけど、 そうでもないんだよね、これが。 単純にオブジェクト指向が壁になっているんだろうか? WebProg版のPerlerの人、Ruby勉強してみな。便利だから。 一度使ったらやめられない止まらない。
>>378 Ruby勉強中。
でもCGIは作んないかも。
>>378 まだまだ一般的にサーバーに入ってない場合が多いからねぇ。
これが改善されることがRuby普及の為の近道のような気がするけど。
いくら初心者を取り込もうと思って本とかサイトとか作ったって、
サーバーに入ってないからやらないって人は多いと思う。
みんなで大手プロバイダ、レンタルサーバーにお願いしましょう!
テンプレは次の人が考えたもので↓
>ID=xxxxxxxxxxx
>NAME=○× △
>POST=zzz-zzzz
>ADR=×××県 ×××市 ×××町 ××××
>TEL=0123-45-6789
>BIRTH=19xx-yy-zz
>M_ADR=mail@●◆▼.ne.jp
>CATEGORY=その他
>MESSAGE=
> いつもお世話になります。
>
> 会員のCGIサービスについて要望いたします。
>
> スクリプト言語に Ruby を追加願います。
> Ruby は、日本人が日本で開発したオブジェクト指向スクリプト言語です。
> 記号の羅列のような Perl よりも読みやすく、親しみやすいと言う特徴がありま
>す。
> 最近は、各種解説書などが発行されるなど、盛り上がりを見せています。
> しかし、CGIなどでこの Ruby を活用できる環境は非常に限られています。
> この日本発のすばらしい言語の普及に御社もご協力いただけませんでしょうか。
>
>Ruby のホームページ
>
http://www.ruby-lang.org/ >
> なにとぞ、よろしくお願いいたします。
>
>
○× △ 様
平素は「●◆▼」をご愛顧いただき、誠にありがとうございます。
x月y日付のメールでのお問い合わせの件につきまして、ご案内させて
いただきます。
この度は、「ホームページサービス」に関する貴重なご意見を
いただき、誠にありがとうございました。
○×様のご意見は、今後のサービス内容に反映できるよう、検討課題と
させていただきたく存じます。
お気付きの点や至らない点等ございましたら、ご意見ご指摘いただければ
幸いです。
今後とも「●◆▼」をよろしくお願いいたします。
お問い合わせ、ありがとうございました。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
株式会社●◆▼ネットワーク
●◆▼ダイヤル 担当:××(super@●◆▼.ne.jp)
サポートホームページ
http://www. ●◆▼.ne.jp/support/
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
381のユーザ用お願いテンプレは'>'が入っていて使いにくい 382のサポート担当用気のない返事テンプレは使いやすい
<%= mail.name %> 様
平素は「●◆▼」をご愛顧いただき、誠にありがとうございます。
<%=mail.month%>月<%=mail.day%>日付のメールでのお問い合わせの件につきまして、ご案内させて
いただきます。
この度は、「ホームページサービス」に関する貴重なご意見を
いただき、誠にありがとうございました。
<%= mail.name %>のご意見は、今後のサービス内容に反映できるよう、検討課題と
させていただきたく存じます。
お気付きの点や至らない点等ございましたら、ご意見ご指摘いただければ
幸いです。
今後とも「●◆▼」をよろしくお願いいたします。
お問い合わせ、ありがとうございました。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
株式会社●◆▼ネットワーク
●◆▼ダイヤル 担当:<%= mail.tantou.name %>(<%= mail.tantou.email %>)
サポートホームページ
http://www. ●◆▼.ne.jp/support/
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
384のerbテンプレートを使うために、サポート担当者はrubyとerbを使う。 そこで担当者は気づくの。ruby(・∀・)イイ! そしてrubyがインストールされる。 384はこんな方向に持っていくためのテンプレート
1.4.x のころからRuby使ってて、提供しているCGIサーバでも 使えるようにしてたけど、頻繁なバージョンアップと互換性の無さで フォローが大変だった。今はもう安定してきてるとは思うが・・・
現在広く使われていると思われる1.6.8と最新版1.8.0は互換性の無い仕様変更が加えられたし、 肝心の1.8.0はstableとは名ばかりのバグバグバージョン。 こりゃ、Rubyを入れるのを躊躇うのも仕方ないだろうな。
stable = バグをとって安定にしていく枝 current = 新機能をいろいろ試してみる枝 なんじゃねーの? つーか自分でインタプリタが設置できないような鯖で 無理にRuby使わなくてもいいじゃん。
そうだな、あんまり無理すんな
>>388 >互換性の無い仕様変更が加えられたし
だからメジャーバージョンアップしたんじゃん。
Perl4とPerl5の違いが〜って言うのと大して変わらんぞ
前はマイナーでもやばかった 1.6.7あたりが境目かなあ ライブラリがあるバージョン以上を要求するんだが むやみに上げるとcgi周りがこけるという状況に・・・ 自分用だったらどうにでもなるんだけど
なにかいい参考書ありませんか?
そう、具体的なRubyでCGIを実践的な本を紹介してほすい。
PerlでCGI覚えたから特にRubyでってのは分からん CGIクラスはフォームデータ受け取るくらいしか使ってない
>>396 CGIクラスはフォームデータ受け取る以外はイラネ
そう?オレはフォームデータ受け取りのほかに クッキーの読み書きにも使ってる
うちの犬の名はクッキー
>>398 あぁ、確かにそれは要るな。あと cgi/session はちょっと使える。でもあとはイラネ。
>>394-395 ML で話題になってた「基礎から学ぶWebデータベースプログラミング」ってどう?
あれだけ誉め殺されてるところをみると、
かなりアヤシイ本なのではないかと推測しているんですが。 (←ひねくれ小僧)
そのML読んでないけど、面白そうだから買って来るよ。
売ってなかった...ざんねん。 明日違う本屋にいくよ。
定数を warning を出さずに上書きする方法ってありますか?
それ、定数って言わないんじゃ
いや、危険な賭けじゃがひとつだけ手がある。 名前の最初の一文字を小文字に変えるのじゃ!!
407 :
nobodyさん :03/10/06 08:41 ID:BTATtbka
>>404 これはどう?
class A; TEST = 1; end
class B < A; end
class C < A; TEST = 5; end
p A::TEST, B::TEST, C::TEST
408 :
nobodyさん :03/10/06 08:44 ID:BTATtbka
あと、こんな感じ class A; TEST = 1; end class B < A; end p B::TEST class B < A; TEST = 5; end p B::TEST
>>404 class A ; X=1 ; remove_const(:X) ; X=2 ; end
"||="←これ、どこに説明があるの?
perlからの流れっぽいしなあ、それ
左辺に変数が出てきた時点で nil にアサインされるのかな? それとも未定義だけど評価できるのかな?
> 左辺に変数が出てきた時点で nil にアサインされるのかな? yes. try below ruby -e 'a = [p a]' ruby -e 'if false then a = 1 end ; p a'
415 :
nobodyさん :03/10/21 08:13 ID:SnhWYpxu
hage
416 :
nobodyさん :03/10/24 17:30 ID:cS8OCSw0
>>416 DBI + Amrita でデータベースの情報を表示する CGI を良く作るので
これはと思って会社で使おうとしたがプレビューができなかった。
418 :
nobodyさん :03/11/03 22:00 ID:a8+MLyNB
おれもプレビューできなかった
419 :
nobodyさん :03/11/03 22:36 ID:c9cmQMPl
dene
eclipseの使い方の問題じゃないかな…… ちょっと手間取ったが普通に使えている。
421 :
hn ◆iKwMOjCT4s :03/11/04 14:07 ID:nVQycvvt
Ruby インタプリタの位置を設定してやらないとダメです。 その設定がうまくいってなくてもユーザに通知するとか一切無いので、この辺なんとかしなきゃと思ってます。
>>421 もしかして作者さんですか?
ぢゃぁ、質問させてください。
あるホームページの管理を任されました。
楽をしようと思ってWebPublisherをインストールしました。
そのページのソースをWPに読み込ませたのですが、
「Missing end tag for 'A' (got "TD")」
となってプレビュー表示出来ません。
問題になっているところはおそらく下記のようなところだと思います。
<TD>
<A href="
http://www.xxx.ne.jp/ " class="LinkTitle2">Link</A>
</TD>
そこで、A タグを[Source]−[Edit Tag]すると、・・・・・ href以外の属性は編集出来ないんですか?
WPは0.5.2、Rubyは1.8.0 Cygwin、Eclipsは2.1.2です。
Simpleなどではきちんと動作を確認しています。
なお元の作者が何のツールを使っていたのかは不明です。
ちなみに彼は開発に疲れてヨガの眠りに就きました。
フォームでファイルをアップロードする時に
cgi.form("method"=>"post","action"=>"xxxx.cgi","ENCTYPE"=>"multipart/form-data"){
cgi.input("type"=>"file","name"=>"send_data") +
cgi.submit("value"=>"upload") +
cgi.input("type"=>"hidden","value"=>"#{other_data}","name"=>"other_data")
なことをやると思うんですが、受け側のxxxx.cgi(もちろんrbファイル)では
これらのデータはどう扱われているのですか?
つまり
・upしたファイル
・他に必要なデータ
はどのように扱われているのか教えて下さい。
ちなみに
ttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/25399 見たけどサパーリです。
>>423 cgi.rb の使い方、でいいのかな?
通常、foo['bar'][0] で取得するところが
multipart/ form-data の時は foo['bar'][0].read になるくらい、かな
あーあとtype=fileの場合、foo['bar'][0].original_filename がつくなあ 何年も前に書いたコードを見てるのでもしかしたら変更があったかもしれん
>>425 お返事ありがとうございます。
見つけられました!感謝します!
RubyのCGIでエラーが発生したときに Internal Server Error じゃなく、ブラウザにエラーコード吐き出すこと って出来ますか? apacheのログ見に行くのが面倒臭いもので…
何かモジュールとかあるのかは知らないが 例外捕まえるのがいいかもね rescue StandardError rescue ScriptError の時にContentヘッダと$!を出力、とか
429 :
428 :03/11/18 12:05 ID:???
あ、あと もしも、mod_ruby を使ってるなら、httpd.conf の中で RubyRequire apache/ruby-run -> RubyRequire apache/ruby-debug RubyHandler Apache::RubyRun.instance -> RubyHandler Apache::RubyDebug.instance の変更でエラーが補足できるよ
捕捉でした・・・
mod_rubyはインストールされているので
>>429 の方法にしようと思ったのですが
これは右辺を左辺に変更でいいんですよね?
とりあえずコメント部とeruby部を削除したhttpd.confですけど
# BEGIN_MOD_RUBY
<IfModule mod_ruby.c>
RubyRequire apache/ruby-debug
<Location /ruby>
SetHandler ruby-object
RubyHandler Apache::RubyDebug.instance
Options ExecCGI
</Location>
<Files *.rbx>
SetHandler ruby-object
RubyHandler Apache::RubyDebug.instance
</Files>
RubyRequire auto-reload
</IfModule>
# END_MOD_RUBY
これでOKですよね?
でも表示されません…(´Д⊂グスン
この場合拡張子は .rbx に限られるけど、その辺は問題ない?
>>432 おっと(;・∀・)
…でも
<Files *.cgi>
SetHandler ruby-object
RubyHandler Apache::RubyDebug.instance
</Files>
を追加しましたが駄目でした。゚(゚´Д`゚)゚。
そりゃcgiの定義が他の場所にもあるんじゃない? VirtualHostでRubyのデバッグ専用の設定を作るのが よさそうな気がしてきた・・・ いつもApacheのエラーファイル使ってるが
結局、cgiクラスとeRubyどっち使うのがいいんですか?
好きなほうでいいんじゃない PerlとPHPどっちがいいか?ってのと似てる・・・
cgi.rbは、本来別にすべきHTML関連の機能が入ってるから話しがややこしくなるな。 cgi.rbのHTML関連の機能を使ってるやつなんているのか?
居る訳ないだろ。
eRubyの方が見やすそう
eRubyはめったに使わないが、 使うときでもパラメタ取得等にcgi.rbも併用してる・・・
確かにフォームのデータを受け取るにはcgi.rbが必要だね でもそれ以外…
正直、フォーム、 Cookie 、Session 等以外の機能は別のファイルに分離して欲しい。
443 :
初心者 :03/11/20 17:27 ID:???
>>434 遅レスですが、mod_rubyの方の設定でブラウザにエラーコードを
吐き出すことが出来ました!
なんとhttpd.confでmod_rubyをロードしてなかったという恥ずべきミスを
していた自分…(/ω\)
で、追加質問なんですがw、
eRubyも使えるように設定しようとしてるのですが、
<Files *.rhtml>
SetHandler ruby-object
RubyHandler Apache::ERubyRun.instance
</Files>
これをhttpd.confに書けば *.rhtmlはeRubyを介してくれるんですか?
rhtmlファイルを読み込むとダウンロードさせようとするもんで…
mod_ruby を--enable-eruby で作ってあればいけると思うが
445 :
初心者 :03/11/21 09:45 ID:???
>>444 もうすでにインストされてる場合、
mod_rubyのフォルダで
% make clean
% ./configure.rb --enable-eruby
% make
% make install
でOKですか?
どこまで実際にやっててどこからやってないのかわからんと・・・ 私は、Apache2->Ruby->eRuby->mod_ruby の順番で インストールして、滞りなく使えてるけど
447 :
初心者 :03/11/21 13:41 ID:???
apache-1.3.27(最初から入ってた) -> ruby1.8.0 -> eruby-1.0.4 -> mod_ruby1.0.7 の順でインストール済みなんですけど… apacheが古いとか関係ないですよね?
*.rbx は動くのかな? Files が使えないってことはあるのかな・・・ AddType application/x-httpd-eruby .rhtml を追加するというのはどう?
449 :
初心者 :03/11/21 15:08 ID:???
>>448 実はそれも付け加えてあるんですよねw
AddType application/x-httpd-eruby .rhtml
Action application/x-httpd-eruby /cgi-bin/eruby
↑上記をです
ちなみに/cgi-bin/は
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
<Directory "/var/www/cgi-bin">
AllowOverride All
Order allow,deny
Allow from all
</Directory>
とされてます
もちろんその下にはerubyをコピーしてあります
>>449 ん、、、
mod_ruby の場合、cgi-binの下にerubyを置く必要は無いので、
>Action application/x-httpd-eruby /cgi-bin/eruby
この行も、cgi-bin/eruby もいりません。
ついでに定義もどっちかひとつにした方がいい
451 :
初心者 :03/11/21 15:45 ID:???
>>450 なるほどメモメモ.._〆(゚▽゚*)
という訳で<Files>〜を全てコメントアウトして、AddTypeのみにしましたけど
まだ駄目です…(´Д⊂
ダウンロードしろという奴をダウンしてきて、エディタで開くとそのまんまだし…
>>451 おかしいなあ・・・
apacheの再起動はしてる?
restart じゃなくて、stop -> start してみて
453 :
初心者 :03/11/21 16:38 ID:???
>>452 今までrestartでしてました
stop -> startしても変わりません…
ご迷惑おかけして申し訳ないです
まだ他に何か考えられるとこ無いですかね?
454 :
初心者 :03/11/21 16:54 ID:???
スイマセン、何故だか自己解決しましたw とりあえずAddType〜をコメントアウトして、 もう一度<File *.rhtml>でやってみたら何故か出来た…Σ(´Д`lll) 昨日までと同じなのに… 他に変えたとこは RubyRequire auto-reload をコメントアウトした位なんだけど、関係あるのかな〜?
動けばいいってものじゃない <File>を使うなんて的外れもいいとこ httpd.confについてよく勉強すれ
456 :
初心者 :03/11/21 18:33 ID:???
>>455 ふむふむメモメモ..._〆(゚▽゚*)
勉強いたします。
ついでになぜ<Files>がいけないのかご教授頂ければありがたいです
mod_ruby の元のページでの設定方法には、<Files *.rhtml> の方法しか 書いていないわけだが…
>>455 >動けばいいってものじゃない
いいえ、動けばいいんですよ。
目的と手段がごっちゃになってはいませんか?
apache-1.3.27 ruby1.8.0 eruby-1.0.4 mod_ruby1.0.7 でerubyを動かしたいんですが、 apacheを動かす際、 Starting httpd: Syntax error on line 250 of /etc/httpd/conf/httpd.conf: Cannot load /usr/libexec/apache/mod_ruby.so into server: libruby.so.1.6: cannot open shared object file: No such file or directory と出て起動してくれません。 この前にruby1.6がrpmで入ってたのですが、アンインストールはしてあります。 ちなみに、libruby.so.1.8が/usr/local/libフォルダに入っていますが、mod_ruby.so の方でなぜか1.6を探しているみたいです。 これはmod_rubyのconfigureの際のオプションで直るのでしょうか? ご教授願います。
mod_ruby.so や libruby.so のnリンク先を調べたり、 ldd してみたらどう?どれかが古いままなんだろう
>>460 lddなんてのがあるんだ(;゚∀゚)
lddしてみたら、libruby.so.1.6がNot Foundになってたから、
/usr/lib/見たらやっぱり無かったよ
という訳で/usr/local/lib/libruby.so.1.8を無理やり/usr/lib/libruby.so.1.6
ってしたら上手くいっちゃったけど、なんでmod_rubyは1.6を探そうとするの?
configure時の設定ですか?
とりあえず(TдT) アリガトウ
>>461 あぁ1.8を1.6としてリンクさせました。
補足です。
463 :
初心者 :03/11/30 22:44 ID:???
またお世話になります。
あれからeRubyでCGI書いてるのですが、
フォームでファイルをアップロードするとこで困ってます。
>>424 のようにやってみたのですが、
undefined method `read' for nil:NilClass
readが無いって言われます。
他にもoriginal_filenameとかも無理です。
ちなみに、これをRubyでやると上手くいきます。
なぜなんですか?
nil だから。nilチェック入れてデバッグするのがいいかな ついでに、オレも1.8にして気がついたが、 cgi.params['bar'][0] にしないとアクセスできんかった気がする
465 :
初心者 :03/11/30 23:08 ID:???
>>464 そのnilチェックはどうやってやるんですか?
466 :
初心者 :03/12/01 00:19 ID:???
あぁぁ paramsなんて無いって言われるわ ファイル開こうとするとInsecure Operationって出るわ Rubyなら出来ることがeRubyで出来ない…
ああ、セキュリティレベルか。 適時、untaint をするとよろし 基本的に、外からもらう文字列にはuntaintが必要
468 :
初心者 :03/12/01 10:35 ID:???
>>467 file関係はまさにセーフレベルでした!
eRubyのデフォルトのセーフレベルっていくつですか?…て
これ位は自分で調べられますねw
ただ、multipart/form-dataの方が全く駄目です。
なんでreadが無いって言われるんですか…?
469 :
nobodyさん :03/12/01 15:11 ID:crZKm9cC
eruby で簡単なものを書いて表示させるときちんとブラウザ に表示されるのですが、アドレスに引数を付けて表示させると なぜか Internal Server Error: premature end of script headers と出て表示されません。 apache のエラーログには /usr/local/bin/eruby: missing required file to process と出ていました。 もともと Windows + AnHTTPd + ruby1.6.8 できちんと動作 していた .rhtml を、 Linux + apache2.0.40 + ruby1.8.0 + eRuby 1.0.4 に持ってきたのですが引数を付けると動かなくなってしまって困ってます。 どなたかアドバイスいただけないでしょうか。
1.8.0になって、cgi.rb周りがけっこうかわってる 引数って例えばどこにどんなのをつけたのか?
そのようですね、で一応ホントにシンプルなものを書いてテスト
していました。以下はテストのために書いたものです。
---test.cgi-------------------
#! /usr/local/bin/eruby
<html><body>
<%
require 'cgi'
p CGI.new.params
%>
</body></html>
------------------------------
普通に '
http://xxxxxxx/test.cgi?AAA ' とすると
{"AAA"=>[nil]}
と出るのですが '
http://xxxxxxx/test.cgi?AAA= ' と
'=' を付けると(というか記号をつけると)Internal Error
になります。
# require 'cgi' しなくても引数に '=' を付けるとエラーになります。
# これは普通でしょうか?
んー、、、ちょっと同じ環境作るのでバージョン教えてくれないか あと、 begin require 'cgi' p CGI.new.params rescue puts $! end とかできるかのう
入れて見た、、けど現象出ないねえ eRubyがreadlineと相性悪いのは発見したが・・・(x86Solaris9)
$ eruby --version; /usr/sbin/apachectl -v eRuby version 1.0.4 ruby 1.8.0 (2003-08-04) [i686-linux] Server version: Apache/2.0.40 Server built: Jul 31 2003 11:36:14 です。 ruby/eruby ともに公式サイトで安定版として公開 されている最新のものだと思います。 それから begin 〜 resuce 〜 end は実行出来ませんでした。 Internal Server Error、要するに今までと同じエラーが 出てしまいます。 今のところ先頭行に #! を付けて .cgi として CGI として 動かしていますが、httpd.conf の AddType + Action で .rhtml としても同じ状況になってしまいます。 相変わらずアパッチのログには missing required file to process. と出てます・・・
475 :
469 :03/12/01 19:16 ID:???
そうですか、うーんなにが悪いんでしょう・・・ それはそうと、わざわざ試していただいてありがとうございました。 # あー、Windows に戻すのはやだなぁ・・・
あれ、、、mod_ruby は使ってないのね? それで先頭の#!/・・・を使わないで起動してるってことは /cgi-bin/ あたりにeruby 入れてるのね。 ちょっとその環境で試してみるわ。なんかあやしそうだ・・
477 :
469 :03/12/02 19:33 ID:???
あ、そうでした。mod_ruby は使っていません。ですが先頭の #! は有るのと無いの両方試しましたがどちらもうまくいきませんでした。
>>477 そういえば、、lib の 1.6だったかを挿してて無理やり1.8をリネームしたのも
>>477 だっけ?
1.6.xのとっ中までcgi.rbがパラメタの=の両端がそろって無いとエラー出す
バグがあったのを思い出したよ。あやしいバイナリ全部作り直せ
そのバグは 1.8 では直ってるんですよね? ちなみに僕はそのリネームした人ではないですが、 一応バイナリ make しなおしてみます。 # cvs 最新版で試したりと、もういろいろやってはいるのですが^^;
素直に ruby-list に投げるとか。
どうも、質問させてもらいます。 簡単なタイムアウトエラースクリプトを組んだのですが、 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です。 よろしくお願いします。
>>481 1行目に
#!/usr/local/bin/ruby18
print の前に
print "content-type: text/plain\r\n\r\n"
を付け加えて481.cgiとして保存して試したら、timeoutって返ってきたよ。
>>482 これでやったけど
#!/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
駄目ぽ…。タイムアウト反応してくれない…。
ファイルに書いてみればどう勘違いしてるかわかるよ
>>484 ん?どういうことですか?
printの出力先をファイルにしても、timeoutが反応してくれないので
無限ループから抜け出せないから見れないんですが…
それとも俺が青二才なのかな…?
モジュール使ってたりして
調べてるとこんなの出てきた 以下勝手に引用 >一つの ruby のプリミティブで実行してしまうので、スレッド切り替えポイントがないので >タイムアウトにならない >Ruby のスレッド切り替えについて、大分誤解してて、SIGALRM が来たら即切り替え、 >だと思っていたら、大抵の場合そうではなく、pending しておいて、切り替えポイントで > pending が true なら切り替える、みたいなことをしているんだと思う。 関係あるかな?
>>485 CGIとそうじゃないほうで p [RUBY_PLATFORM, RUBY_RELEASE_DATE, RUBY_VERSION]
したら何になるの?
>>488 両方とも["i686-linux", "2003-08-04", "1.8.0"] でした。
>>483 うちの環境では timeout したよ。
Apache(とか httpd の類)の log みたほうがいいかと。
492 :
nobodyさん :04/01/06 01:54 ID:xw1q3uSM
cgi.rbでcookieを設定すると、operaで上手く動かない時がある。 なんでだろう?
例外処理で、NameErrorやZeroDivisionErrorはちゃんと捕らえてくれるのに、 TimeoutErrorやSyntaxErrorだけ察知してくれないのは何が考えられるのでしょう?
>>493 リファレンスマニュアルの raise の項と、例外クラスのリストを穴があくまで見れ。
>>494 むぅ、読んだけど間違ってない気が…
簡単な例を書くと、
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のデバッグモードなんですが、
それと関係ありますか?
SyntaxError は eval 系内で起きる構文エラーをキャッチする目的で使ってくれ。
tDiaryってAAA! CAFEで使えますか?
CGIからデータを入力させて、それをgnuplotでグラフ化して
画像として保存し、ブラウザで表示させたいと思っています。
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を通すと動いてくれません。
原因がわかる方いらっしゃいますか?
>>499 ディレクトリのパーミッションとかは大丈夫?
>>500 あっ、それか!
とりあえずcgi-binディレクトリを777にすると色々うるさく
言われたので、その下に777のtmpディレクトリを作成し、
そこで作業をしたら出来てました!
ありがとうございました(=゚ω゚)ノ
WebrickのServletとして書いたものを、できるだけいじらずにCGIとして動かしたいんですが いいライブラリとかありますか?
ありがとう。助かりました。 webrickのMLのログも知らなかった。
>>121 を見て自分の開発中のWikiEngineを窓から投げ捨てようとしているヤシよ
yaml と pstore でググってみよ
>>505 あ、俺の事だ。
とりあえず解決したよー。
アドバイスさんくす。
507 :
nobodyさん :04/02/24 02:31 ID: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'
$ rpm -q ruby eruby mod_ruby apache 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辺りの環境では問題なかったんだけどなぁ
rubyをwindows上で動かしたいのですが、apacheの設定で必要な ものってありますか?
>>509 Perl/CGI が動いているなら、Ruby/CGI もそのままいける。
>>507 mod_ruby使ったことないんだけど
textって、mod_ruby下でもほんとにトップレベルにある?
その変な無名モジュールに包まれてるみたいだけど。
仕様書を読む気力が無いのですが、良かったら教えて下さい。 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'}){''} ならオッケイなんですが、これで正しいの? ボディはいつも返さないといけないのかな?
>>513 print CGI.new().header({"status"=>"NOT_FOUND"})
>>514 あ、なるほど。CGI#out にするのが悪かったのね。サンクス。
516 :
507 :04/02/26 01:23 ID:???
力業。 Kernel.module_eval { def text p "text" end module_function :text } 「トップレベル(に見える場所)で def する癖はやめましょう」が 一番の正解だと思います。main での def は特殊な予感。
module_function はいらなかった。 Kernel.module_eval { def text p "text" end }
519 :
507 :04/02/27 17:30 ID:???
>>518 確かにエラー出なくなりました。ありがとうございます。
普通にerubyでも動くんで
小さいスクリプトはこれでいこうと思います。
>>505 Ruby 1.8.0 に添付されてた yaml なんだけど、
自己参照の多い、ちょっと複雑なArrayとかがまともに保存できなかったので
使うのをyamlことにしたんだけど、新しいのが出てるのかな?
忘れてた。Kernel に定義するのは危険すぎです。
mod_ruby だと高速化のためにプロセスを使い回すわけだから、
タイミングによっては def text してないスクリプトで text が
呼べてしまう現象が起きてしまうかも。
こういうのは不可解なバグにつながる危険があるから、
本当におすすめできません。
>>521 まともって??
とりあえず 1.8.1 使いましょう。
windowsでrubyをc直下にインストールしたけど、 CGIスクリプトの一行目は #!usr/local/bin/rubyでいいのでしょうか?
>>524 なにをどうインストールしたのでしょう?
もし ruby-1.8.1-i386-mswin32.zip を C:\ に展開したのでしたら、
c:\bin\ruby なので #!/bin/ruby になります。
527 :
507 :04/03/02 00:09 ID:???
>>520 ,522
あー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とも変わってないんで
>>527 mod_ruby 側でない?
書き換え量が気にならないなら、こうするのがベターです。
module Func
def text
p "text"
end
extend self # おまじない
end
Func.text
>>528 module_function するのとどう違うんだっけ?
>>529 module_function は private と同じで、指定したものだけか、
もしくはそれ以後に def されたものだけ公開します。
それに対して extend self は全て公開します。
関数群の名前空間に使うのならこちらのほうがお手軽です。
最近 tDiary を使い始めたのですが、 recent_list.rb で表示されるタイトルが a.rb を使って <%= a %> の形式で書いていると そのままで変換されません。 どこをどう変えれば良いのでしょうか? Ruby が全然読めない私にも救いの手を・・・
@conf['apply_plugin'] = true
533 :
531 :04/03/04 17:33 ID:???
>>532 それで上手く行きました。
ありがとうございました。
534 :
507 :04/03/05 01:14 ID:???
>>528 どもです。色々あるもんだなぁ
後学の為の課題とします。
535 :
nobodyさん :04/03/06 17:37 ID:C+c5xFRd
MacOSX(Panther)でmod_rubyを使用してます。 Apache: 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として保存してアクセスすると
536 :
nobodyさん :04/03/06 17:39 ID: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経由でアクセスすると エラーは起こりません。
よくわからないけど、パーミッションはだいじょうぶ? mod_ruby の場合は apache ので動くからね。
538 :
535=536 :04/03/07 08:34 ID:xKL6fKn7
>>537 同じ字面のスクリプトがCGIで動くので大丈夫だと思います。
hoge.rbxは755, nkf.bundleは555(ownerはroot)です。
あと、*.rbのモジュールは問題なくrequireできますし、
同じスクリプトをLinuxに持っていっても問題なく動きます。
540 :
nobodyさん :04/03/12 10:37 ID:XHgrIkQV
>>541 おおーー。面白そう。早速試してみよう。
543 :
541 :04/03/12 19:58 ID:???
examples試してみたけど、感触いいねー。
544 :
nobodyさん :04/03/12 20:34 ID:lAf/ivCV
>>540 くだらないと思った。
Javaじゃないんだからそんなフレームワークとかなんとかってやめようよ。
普通に組むのが一番いいんだよ。
普通って何?
CGIライブラリ使って、じかに params いじってほげほげするんじゃないの? それですむ場合も多いとは思うけど、やっぱり仕事とかで大量のページ遷移を 作らなきゃいかんときは、フレームワークあったほうが便利だわな。 究極的には自分用(もしくは会社用)フレームワークを自作すればいいんだが。
楽ができれば何でもいいさ。
>>546 CGIKIT見りゃ分かるけど、ウェブ用のフレームワークって手間かかるだけで無意味
作るものに合わせて土台を作っていくのが普通だよ あらかじめ作るフレームワークは無駄なだけ
>>548 の家には使えなくなった車輪がいっぱい転がってます。
550 :
nobodyさん :04/03/14 14:14 ID:VM4bxA2x
>>549 過去ログに車輪の再発明とかでてるけど、
Strutsやらなにやらは古タイヤの再利用くらいだとおもう。
ほしい物に似てるけどちょっと違うんだなあ。
だから車体を古タイヤに合わせて設計してみました、みたいな。
似たようなもの毎回作っちゃってもいいんじゃないの?
設計の再利用ってもう流行ってないのかな。
実装なんて再利用しようとても毎回しっくりこないんじゃない?
これ、JBossというかEJBのときにも思った。
既存の道具生かすためになんか本体側で無駄な苦労してるなあと。
>>550 そのあたりはそれこそ、その時々の事情や状況によるものなので、
フレームワークが役立つときもあれば、役立たないときもあるのは当たり前なので、
使う人が勝手にすればいいじゃん。
なので、
>>544 よ、君の意見は確かに君にとってはもっともかもしれないが、
「くだらない」かどうかは人によって違うので、他の人に対して「やめよう」と言う必要は
無いんじゃないかな? もちろん、何言おうが君の勝手だけれど。
で、この話は終わりだと思うのだが。
↓じゃ、次の話題どうぞ。
>>540 EOFの真似というのでかなり興味をそそられるのだが、
この手のもので、どれが一番広まりそうかな。
大きいアプリ作っている人は、皆たいてい「自分用フレームワーク」を持ってると
思うし、この手の共通フレームワークに移行できたら楽かなと思うんだろうけど、
いざ移行するとなると、こいつとなら心中しても悔いなしという決心が要るよなあ。
cerise が実装を結構すすめてる。 J2EE をお手本にしたアプリケーションサーバ( + フレームワーク)。
>>553 EOF って、Enterprise Object Frameworks っていうやつなのかな?
ググってみたけど、あんまり分かりやすく説明しているところが無かったな。
誰か簡単に説明してくれ。もしくは、良いページを紹介してくれ。
なんかアプリケーションサーバとかフレームワークといわれてもな、 結局作者しか使えないフレームワークになりそう。(数年後にははっきりすると思うけど) rwikiの実装見ると、drubyでさらっと作ってる印象。 実はこれが正しいエンタープライズなシステムの作り方だと思うよ。
>>556 そうだと思うけど、デーモン設置禁止のウェブアプリ作らされるところが多いからね。
大きいもの作る場合は、なんかフレームワークないとつらいでしょう。 いちいち手で書くのが好きならいいんだけど、車輪の再発明だもんなあ。
ウザいといえば るびきちさんの言動
>>556 おまえが理解できない&使いこなせないだけだろ。
11:レッテル貼りをする
Ruby/Divはどうですか。 漏れはウェブシステムのインターフェースとしては一番意味があるフレームワークだと思うんだけど。 (他のフレームワークは申し訳ないけど、手間かかるだけであまり意味がない)
Div & Tofu 使ってみたいんだけど、 ドキュメント (チュートリアル的なもの) が見当たんないので手が出せないでいます。
>>562 意味がある、ないを具体的にお願いします。
煽りじゃないよ。何を求めるかによってフレームワークにも合う合わないがあるからさ。
>>563 同じく。何ができるのか、あの紹介ページだけではよくわからん。
箱入り娘を出すのは難しいということだけはわかった。w
566 :
nobodyさん :04/03/23 15:16 ID:h4hJAwq6
rubyでcgiを勉強しようと思ってます。rubyは大学で一応勉強しました。 rubyでcgiを勉強するのにおすすめの本ってありますか? 今のところ候補としては ・Ruby de CGI オーム社 堀川 久 ・RubyによるCGIプログラミング SCC books 三並 慶佐 です。
>>566 どっちも薦めん。tDiary とか読め。
それか、オライリーのCGI本、もしくは Rubyアプリケーション何とか、とか。
それよりも、大学ではどんな風にRubyを教えてるのか、それを教えてくれ。
Divが一番詳しく載ってるのは自分が調べた範囲ではDRuby本かな。でも説明されているコードのバージョンが古いのであとはソース嫁とかそんな世界。
>>568 >>569 dRuby 本は積ん読になってました。読まんと。
divip と UNIX USER もチェックしてみます。
あと、ついでといってはなんですが、
Webrick のドキュメント (チュートリアル的なもの) で良さそうなのありますか?
webrick.org にいくつか使用例がありますが、
フォーム (HTTP POST) を使う例が無いのでそこらへんからつまずいてます。
>>570 他のドキュメントは知らんが、
どういう風に躓いたか教えてくれたら、ちょっと考えてみるよ。
期待はしないでほしいけど。
572 :
nobodyさん :04/03/29 09:30 ID:3mAZfbN2
Rubyっていいのかな〜? ちょっと勉強してみようと思うんだけど、お薦めの本とかあります? 拙者はC言語が分かる程度です。
573 :
nobodyさん :04/03/29 14:03 ID:JHAif1f9
>>570 Rubyのソースにある sample/webrick/demo-app.rb とか。
GETとPOSTのサンプルだと思います。
>>574 おおお!ありがとうございます。私の目は節穴でした。
言い訳ですが、FreeBSD の ports で入れると、
こういう Ruby 標準添付になった物のサンプルやドキュメントが
ごっそり無くなってる (インストールされない) んですよね。
まだ標準添付にならずに独立してた頃の方が、
そのへんがインストールされる分、良かった。
577 :
572 :04/03/30 08:18 ID:???
perlのCGI並に動けば正義みたいだなあ。 perl CGI同様格好のセキュリティホール(攻撃対象)になりそうな予感。
>>578 “perlのCGI並に「動けば正義」みたいだなあ。”
という意味かな?
言語は何を使っても、きちんとプログラムを作らなければ
穴が出来るのは同じだと思うのですが。
わざわざperlじゃなくてruby使うくらいなのに、そのきちんと穴のことも考えようとはならずにperlと同じになってしまっているのは志が低いよ。 なんとなく人と違うことをしたがるけどほぼ同じ事やってるプチあまのじゃくな人が好む言語ですか? それならperlでいいじゃないかと正直思う。
いや、どっちでもいいじゃん。
>>580 穴が出来るかどうかと、出来やすいかどうかとは違う話です。
rubyの方が出来にくいと私自身は感じますが、rubyに親しんで無い人が作れば簡単に穴は出来ます。
それはどの言語でも一緒でしょ。
っていうか、そう思うなら自分で「CGIで穴が出来にくい」言語を作れよ。
どれだけ実用性とバランスが取れた言語が出来るか、見ものだな。
漏れはperl並ならすなおにperl使うよ。面倒だし。 メリットないならrubyでCGIやる必要ないし。
慣れてる言語使えばいいだけの話でしょ。
お前ら釣られ過ぎ。
世の中には釣られるのが好きな人もいます。
漏れは釣りのほうが面白いかな。 ポイントにエサ垂らしてみて食いついてきたらキターって感じ。 デバックしてるときのブレークポイントでうまく捕まえられたときの嬉しさに通じるところがある。 最近は魚も賢くなってあきらかにエサ垂らしても食いついてこないので戦略的に釣りをするところが楽しい。
いや、Rubyを使う漏れから言わせると、 Perl使い続ける人は偉いと思うですよ。 Perl使う人は、仕事人という感じがしてる。 歴史が長いから、ユーザが多いからという理由だけてであれを使いつづけられるのは凄い。 コードに好き嫌いは無いというか、いい仕事をする、いいコードを書くというエゴから解放されていると思う。 Ruby使う人は激しく怠け者。
ほんと、Perl使い続ける人は偉いよ。 農作業なんかも得意だと思うね。
590 :
nobodyさん :04/04/20 15:47 ID:Ea+/kdHD
「基礎から学ぶWebデーターベースプログラミング」 で書かれている内容はWindows+Cygwinの環境で試すことができますか?
できるんじゃない。 Cygwin 上の DB がパフォーマンス悪いくらいのもので。
今なら無料のSFUでがんばるべきのような。一応UNIXだよ。
594 :
nobodyさん :04/05/06 00:28 ID:wtWitys7
print "dump:#{title}\n#{s.unpack(\"H*\")[0]}\n" この構文で warning: escaped terminator '"' inside string interpolation と、エラーがでるんですが、原因はなんですか?
595 :
nobodyさん :04/05/07 22:30 ID:OJ0mxpcs
>>594 お使いのRubyが1.8.0以降でしたら、以下のページの記述が当てはまるかも。
ttp://pub.cozmixng.org/~the-rwiki/rw-cgi.rb?cmd=view;name=changes.1.8.0.ja 以下引用。適当に改行してます。
文字列の式展開 (expression interpolation in strings)
Now arbitrary statements are allowed inside #{} interpolation without escapes.
In other hand, they can no longer access to variables defined in eval.
#{} の中で、任意の文がエスケープなしで記述できるようになりました。
一方、evalの中で定義された変数にはアクセスできないようになりました。
>>580 PerlとJavaを比べたらPerlのほうがいいと思うよ。しかし、PerlとRubyでは、漏れの場合はRubyのほうがいい。
Rubyの長所って何だよ
それを教えてあげたいのはやまやまだが、ここには狭すぎて書けない。
>>598 Amrita
・多少重くても気にしない
・HTML/XML 以外には使わない
・テンプレートにコードは一切入れたくない
602 :
nobodyさん :04/05/20 12:28 ID:NShBOzWM
PHP普及の原因は、イスラエル・Zend社のマーケティングの成功にある。
@Perlでは別インストールで多くの人が知らないデーターベース利用を標準で使用できるようにし、「データーベースが簡単に取り扱える」というイメージを特に強く植えつけた。
Aウェブサイト作成への特化。例えば、セッション管理がそうだ。
Bソースの隠蔽による著作権保護を可能にした。
データーベースを使いたいが、使い方がわからない。そこに、PHPなら使えるという情報が先に入る。これで、PHPに入った人もかなり多いはず。
PHPの言語仕様はZendに大きく左右される。
二年ほど前、PHPが出始めた頃には、変数のスコープがPerlとまったく同じ仕様だった。
もともと、Perlのソースコードを改編して作成されたPHP。
↓PHPの歴史
http://php.planetmirror.com/manual/ja/history.php PHPには、Perlコードの退行による高速化の意図が言語のいたるところに見える。
マイクロソフトは、オブジェクト指向への対応というのが大義にVB6.0からVB.NETに言語仕様を大幅に変えた。
今後も大きく言語仕様が変わることはないのか?
オープンソースとは言っても、Zend社の
http://www.zend.com/management.php の数人のスタップによって大きく左右される。
再帰的定義とされる「PHP:Hypertext Preprocessor」という名前にも理由がある。これは、要するに、正確には、「Perl Hypertext Preprocessor」としたいところだが、GNUの「GNU is Not UNIX」という再帰的な定義をもじったものだ。
要するに、「GPLのフリーソフトのライセンスには違反していませんよ!」と一つには主張し、また、一つには、「PHP is Not Perl」とでも言って、Zendの社としての姿勢を、先人の「Perl開発者たち」から擁護する意図があったのだろう。
Nではなく、Hなのが、そのための味噌だ!Perl開発者たちは、当然、面白くないはずだ。
PHP信奉者は、六芒星(hexagram)マークのユダヤ教にでも、入信せよ!
603 :
nobodyさん :04/05/20 16:28 ID:cgjPprlD
>>602 藻前それ他のスレにも這ってるだろ
マルチぼけがぁああああああああああああ!!
Hikiのプラグインはどのように実行されるのでしょう? def con(str1, str2) str1+str2 end 普通のRubyだと、 puts con(con("h","o"),"ge") #=>"hoge" とメソッド内の引数にメソッドを書いてもOKですが、 hikiで{{con(con("h","o"),"ge")}}を書くと、 Hiki::PluginException(wrong number of arguments(3 for 2)): con が出ます。
>>604 Hikiのプラグインの引数は単に「,」で適当にちぎって
渡すだけで式として評価されるわけではない。ただし
数っぽく見えるものは数に変換したり、"..."や'...'
は外側の「"」「'」をはぎとったりはしてくれたかな。
>>605 では、
con(con("h","o"),"ge")}
のようなことをやりたいときはどうすればいいですかね?
文字列をevalするプラグインでも作るとか? うかつに用意するとセキュリティホールになりそうだが。
確かにXSS対策が必要ですね。
609 :
nobodyさん :04/05/24 15:45 ID:Nhm51Qmv
Windows環境でGDを使いたいのですが、どうしたらいいんでしょうか? Ruby本体はruby-1.8.1-i386-mswin32.zipを利用しています。
hikiアップデートしないとかなりまずい?
jailでも使ってんでない限り、かなりまずー。
amritaのサイトどこいった〜
614 :
nobodyさん :04/07/05 07:05 ID:8NRD/g5j
615 :
nobodyさん :04/07/25 10:20 ID:lhtgOqn2
616 :
nobodyさん :04/09/06 20:32 ID:yBVAikae
amrita復活age
すっげw 1ヶ月とかレスついてないしw Ruby人口って激減してるの?
単にRubyでCGIって人がいないんだろう CGIならPerl、というのが結局定着してるし。
単にこのスレの存在を知らないのだと思う。
というか話すネタがない。
CGIKitにてファイルアップロード後に別ページを表示させるにはどうしたらいいのでしょうか。 単なるフォームの場合はわかるんですけども。
>>621 ソースをアップしてくれたらアドバイス出来るかもしれない。
普通はLocationヘッダを吐くか、<meta http-equiv="Refresh" content="10;URL=
http://example.com/ ">
みたいなHTML吐いてリダイレクトさせる。
623 :
nobodyさん :04/10/18 22:01:58 ID:MFPrIGvP
>>622 CGIKitの場合は
response.set_redirect(飛び先のURL)
ですよ。
ちなみにファイルアップロードの時って違いあるんだっけ?
MoonWolfさん、623さん、ありがとうございました。 お答えいただいた内容をもとに解決することができました。
CGIKitとSWSを比べてるんだが、
CGIKitはWebObjects風に<CGIKIT>タグをtemplateに埋め込むが、
SWSは通常のHTMLタグにsws属性で指示を埋め込めるらしい(Tapestry風か)。
通常タグの方が、templateのデザインにHTMLエディタが使えていいんだが、
CGIKitとしては「プリプロセッサでやってくれ」という立場のようだ。
http://www.freeml.com/message/[email protected] /0000480 というわけで、SWSの方が筋が良さそうなんだが、誰か使ってる奴いる?
>625 やっぱりTemplateEngineは自作でしょ
いろんな用途に使える車輪はないのか
NoraのWeb::Templateがるびまに簡単なチュートリアル載ってて 割と簡単だったので今書いてるプログラムに使う予定。 ruby-listのがちょっとアレだけど、まあ。
629 :
nobodyさん :04/11/13 01:24:13 ID:a20D0PWx
昔どこかのサイトでテンプレートエンジンの速度の比較データを見たことがあるんだけど検索してもみつからない。 どこのサイトか誰か知りませんか?
>>617 最初っから rubyでcgi書いてるやつそんなにいないから。
今日,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が使われていないって事でしょうか…?
自己解決しました. サンプルのhttpd.confのままだと/rubyにrubyスクリプト置かなきゃ駄目なんですね… 恥ずかしい…
SWS 使ってみたいが、日本語の情報なさすぎ。
影舞入れてみた。 ちょっと感動した。 っても、BTS使おうよ!!とこれから会社の連中に頼み込まねばならんのだがorz # どうせならDB、Firebirdにも対応させたいなぁ
影舞でToDoの管理を始めてみた。 なかなか便利だ。 っても、おれのToDoがバグ呼ばわりされてしまうのがorz # 最初の報告者の表示を消したいなぁ
636 :
nobodyさん :04/12/15 22:22:22 ID:GHNVBmM1
PerlとRuby両方で掲示板作りに挑戦してみたけど、趣味でやるならRubyの方が楽な気がします。 30歳を超えたサラリーマンの日曜プログラマは作りかけのスクリプトを一ヶ月ぶりに開くなんてザラ。 この歳になると記憶力も相当に落ちているので、コードが読みやすいことは切にありがたいのです。
それではみなさんよいお年を。 来年はCGIクラスが使いやすくならないかな。
638 :
637 :04/12/31 22:35:02 ID:???
はたしてrubyはアプリケーションの基盤として使用に耐えうる言語なのかどうか。 これは開発者のメンタリティの問題だが。
cgi.rb の仕様が間違っていたのは火を見るより明らかなのに、 いつまでも cgi.rb なんか使い続けてる方が間違いでしょう。
Rubyの標準添付以外に、まともなCGIライブラリ実装ってあるん? 標準添付のがまともだと言う気はさらさらないが。
今熱いのはRuby on Railsだな。
Nora かな。 とか言うと荒れそうなのでやめとく。
WEBrick::CGIはどうよ? 既に標準添付されているし、 WEBrickのServletとしてもすぐに使えるように作れるし。
>644 え、標準添付? ……うぉっ、ほんまや。 たまにはmake installしたあとlib以下ものぞいてみるもんですなorz つらつら眺めてみるです。さんくー
ここにも貧弱なRubyドキュメントの弊害が
リファレンスには徐々にドキュメントが増えているので、 1.8.3が出る事には改善されていると思いますよ。 ……などと他人事のように書いているのが間違いなのか。
648 :
nobodyさん :05/01/04 08:17:56 ID:Y50UuVB0
cgi.rbよく使ってるけど、どのへんの仕様が間違ってるの? 他に乗り換えなきゃいけないくらい深刻?
phpに対するrubyの優位点ってありますか? あるとしたらどんな点ですか?
>648 638で出てる辺りは結構イヤソな気も。
651 :
648 :05/01/05 07:58:47 ID:ZQKhbklS
なるほど互換性の問題ね。
たしかにそれはある。
>>649 CGIがRubyの書式で気持ちよく書けることでしょ。
またいったん覚えたらRubyの方がいろいろと他の用途にもつぶしがきく。
でもウェブ技術に限定すれば、ユーザーも多く高速なうえサーバー負担も軽いときているPHPには到底及ばん罠。
PHPって高速なん?
>652 PHP使うときは99%mod_phpで動かすからなぁ。 mod_perlやmod_ruby使えば……むー、どうなんだろう? いいベンチの取り方ないかなぁ。 (っても、まずmod_php、mod_ruby(とついでにmod_perl)使えるようにして 各言語でカリカリにチューニングしたコード書かなきゃならんよなぁ。マンドクセ)
ただmod_rubyは専用鯖か自宅鯖限定になっちゃうからな・・ ウェブ用途で使いたい奴の大半は共用鯖で使うこと考えてるわけだしなぁ
なんでphpってmobで動いてるのが多いの?
てゆうか、サーバーのモジュールでないピーエイチピーインタプリタなんてあるの? ウェブに特化して設計してあるから、仮にあっても汎用的なスクリプト言語としてはまだまだ非力だと思うがなぁ。
>>656 あるよ。
ちょこっとテストしたいときとかに、コマンドラインで、
% php hoge.php
みたいに試せるので便利。
ただ、それ単体で実用しようという気にはなれないけど。
>>656 CLI(Command Line Interpreter(?))ってのがあって、ソースからコンパイルするとそれが/usr/local/binとかにインストールされる。
それとは別にCGI実行用のコマンドも作れるのだが、コマンドラインからスクリプトを実行しただけで必ずHTTPヘッダが出力されるからいやーん。
Webプログラミングから入った人が簡単なコマンドラインスクリプトを書くには、やっぱりCLI版のPHPがいい。おれはよく使う。
659 :
656 :05/01/08 12:13:44 ID:???
へえー。 結構何でもできるとなるとユーザー多いから結構なコミュニティに発展しそうだね。 ピーエイチピーはスルーしない方がいいね。
素直にperlで書け
だってperl_mob入ってるサーバ少ないんだもん。
perl_mob とかいわれると LYNCH MOB とかを連想してしまう。 ところで mob とか perl_mob とかって一体何?
mob_perlだった、スマソ。 apachのモジュールとして動いてるって事。>mob
英語って似たような字が多くて難しいよな。
ごめんね、本当にごめんなさいorz 顔から火が出るほど恥ずかしいです。 moduleでしたな。。
WEBrickでのセッション管理にはTofuを使うのが常道? もうちょっとマシなのは ないんすかね。 あ、WEBrick::CGI使うのを想定してます。
>>666 Tofuが常道とは思いませんが、他にセッション管理のみを扱うライブラリは
見当たらなかったような。もしくはフレームワーク(CGIKitとかrailsなど)を使うとか。
ところでTofuだと何か問題がありました?
Tofuを使うと、 Tofu::sessionクラスを継承したセッションオブジェクトの中に 全てをくるまないといけないので、自前のクラス設計とコンフリクトしそうで嫌なんです。 あとからセッション管理を追加するときに大幅にクラス設計見直す必要がありそうだし。 cgi/sessionみたいに軽くつかえる奴が欲しい。
670 :
669 :05/01/10 10:08:44 ID:???
>>669 バグを修正して、
WEBrick::Session#updateは呼び出さなくても動作するようになりました。
>669 おおー。こういうのが欲しかったんです。 ありがとございますん。 さらに欲をいうと、こいつを、WEBrick::CGIだけじゃなくてServletでも使いたいな、と 思うわけですが、それは無謀? ファイナライザがそのまま使われているようなので、 そのままじゃ使えないとは思いますが。
672 :
669 :05/01/11 06:42:23 ID:???
673 :
nobodyさん :05/01/11 17:22:13 ID:lK4o2i8P
掲示板作ってます。 セッションって確立しないとどうなるの?
確立しないとCGIの作りにもよりますがユーザー権限を乗っ取られる場合もあります
???
676 :
666 :05/01/12 01:56:04 ID:???
>>672 ああ、そうか。面倒なこと考えなくても、自分で一発close呼んじゃえばいいんですね。
了解です。感謝。
>>674 それは「確立したセッションが奪われたら」の話では?
> セッションって確立しないとどうなるの? あるHTTPリクエストと、別のHTTPリクエストが、同一のユーザによる一連の操作であるかどうかがわからない。 ただそれだけ。
679 :
nobodyさん :05/01/12 18:15:05 ID:+NFabzw5
管理画面とかいらないならね
「この内容でupしますよ、いいですね?」確認画面すら不要ならば。
>>681 それはstatelessに実装することもできる
683 :
nobodyさん :05/01/13 08:14:30 ID:a5QOCrWy
隠しコントロールにそのページ固有の値をもたせるだけでも「セッションもどき」が実現できないかなあ。 一連の操作で使う共通の変数とかもそれ用のログファイル作ってそれに保管しとけばそれらしい挙動しそう。
セッションが不要な場合はセッションもどきで実現する必要はない。 セッションが必要ならセッションを実現すればよい。 結局、セッションもどきなど必要ない。
685 :
nobodyさん :05/01/13 08:50:59 ID:a5QOCrWy
いや、クライアント様のパソコンを汚さずにセッションみたいなことが出来ないかなーと思って。
セッション=cookie、ではない。 セッションの確立にはリクエストを横断した固有情報があればよく、それはURLに埋め込んでも、 フォームの隠しフィールドに入れても構わない。 ただその場合はHTMLの動的生成能力が必要になる。
>>686 「セッションもどき」自体が存在しない、ということ?
689 :
nobodyさん :05/01/14 17:22:14 ID:2UhA1iN0
あたかも配列をいじくるかのようにログファイルの任意の行をサクサク操作できるモジュールってない?
>>689 全てメモリにかかえちゃっていいなら File::readlines しちゃえば?
691 :
nobodyさん :05/01/14 17:48:34 ID:2UhA1iN0
いや、それだとメモリ食うので、任意の行だけメモリに読み込んで、その行だけ書き換えたいのです。
20年位前のプラグラミングですかw
693 :
nobodyさん :05/01/14 18:42:15 ID:2UhA1iN0
そだね。 時代は変わったんだし、メモリはケチらず使うことにするよ。 たしかに20年前のマシンのメモリは2キロバイトとかザラだったなあ。
いや、まぁ 富豪的アプローチするのか節約するのか ケースバイケースなんだけどね 「任意の行だけ」 「その行だけ」ってあたりが ストリームで順次読み込んで該当行のみ処理して操作みたいなフィルタ的な事が したいようにみえて CGIで んな事いってもなぁって思っただけw
696 :
nobodyさん :05/01/17 17:17:54 ID:LAuXubNJ
Rubyレシピブック読んでたら、終わりの方に「オブジェクトを文字列化しファイルに保存する」てのがあって、配列がそのまんまファイル化できるみたいなんだけど、これってCGIにも応用できないかな。 掲示板とかでログの各行を配列に読み込むより効率的と思ったんだが。
保存はできるが掲示板では使えない taintできないから
効率という点でもあまりよくないかもね 追記するにもファイルの中身全部読んで 要素を追加した上で全部書きださないといけないし
699 :
nobodyさん :05/01/18 08:04:09 ID:azVqGT4+
そうですか・・・
696 のって Marshal のこと? ちと taint っていうのを知らなかったのですが、 AAA でなら Marshal は使えましたよ。 解析を行った結果をシリアライズして保存しておけば、 次読み込む時はスクリプトレベルでの解析を実行しない分高速化できますよ。 掲示板でいうならテンプレート部分とか。
>>697 taint できないというのはどういう問題?
たとえばテキストファイルに保存する場合は taint できて Marshal だとできない?
>>703 Elite JournalというのはBlogシステムであり、Railsを使って作って
いるんですね。とても参考になりました。EJで調べます。
ありがとうございました。
==================
rails-0.9.4.1だと、EJのINSTALLに書かれている手順では動きませんね。
(No such file to load -- application.rb)
rails-0.8でないといけないかも。
705 :
nobodyさん :05/01/27 14:23:39 ID:D1xpGaFb
だれか迷路のソース持ってる人いませんか??
俺のソースは全部迷路みたいだがな。
Railsを使ってみました。CGI:Sessionを使っているので、 文字列しかセットできないの? 簡単なコードを書いたけど、うまく渡せたり渡せなかったりです。 1. ShoppingCart.rb 2. @session[:cart] = cart (in controller/application.rb) 3. うまく渡せたり渡せなかったり。。
「Railsの @session はデフォルトで PStore を使うので ほぼ何でも入ります。」とのこと。 (CGIKitを調べはじめていた(^^; 失礼しました。
画像ファイルのアップロードってどうすんべ? require "cgi" cgi = CGI.new file = cgi.params["file"][0] で受け取ったファイルを"gazou.jpg"という名前でサーバーに置きたいんだが、 fh = open("gazou.jpg","w") fh.print file fh.close ってやっても、できたgazou.jpgは空っぽ。 なぜだー! 初心者ですまそ。
>>711 そもそもアップロードフォームの属性はenctype="multipart/form-data"になってるか?
>>711 > file = cgi.params["file"][0]
multipart の場合は、この file は TempFile クラスか StringIO クラスのオブジェクトです。
714 :
713 :05/01/30 01:48:09 ID:???
あ、ごめん Tempfile クラスだ
715 :
711 :05/01/31 00:34:13 ID:???
>>712 ちゃんと本見てるので、そこは押さえてまつ。
その本には送られてきたテキストファイルの内容をそのまま表示する方法しか載ってなかったもんで。
>>713 fhにfileの内容を出力するのにprintメソッドじゃダメってこと?
>>715 Tempfile か StringIO から read で中身を読み出さないとだめってことです
>>711 CGIパラメータの取得方法は、Ruby1.8系から変わってる。
もしもrubyのバージョンが1.8以降なら、ちょっとリファレンスを読んでみ。
fh.print file.read
719 :
711 :05/01/31 07:51:50 ID:jhetKWRL
なるほど! file.readってやるのね。 激しくサンクスです。
720 :
711 :05/02/02 07:41:41 ID:+oua1U51
やっぱりダメだった・・・orz サーバエラーにはならないけど、.readのあたりでスクリプトが止まります。 バージョンは1.6.8です。 もうcgiライブラリを使う方法はあきらめ、直接ARGF.readで得たバイト列からJPGファイルを生成しようかと考え中。
バイナリモードで開いてる?
722 :
711 :05/02/02 18:12:23 ID:+oua1U51
はい。 オープン時に"wb"ってやってますが・・・。
723 :
721 :05/02/02 22:11:33 ID:???
分かった。cgi.paramsを使ってるからだ。 file = cgi.params["file"][0] を file = cgi["file"][0] に変えて試してみそ。 # それにしても、この辺の仕組みややこしすぎ。
724 :
711 :05/02/04 08:49:40 ID:rvzKvXg/
ありがとうございます。 params抜いてためしてみましたがやっぱりダメでした。 とほほ・・・ ルビー挫折しそう。
そこまでやってもダメとなると、確かにもう無理かもわからんね あと考えられるのはHTMLの間違いくらいしか無い…… ここで諦めるなら、無理に押しつけるつもりもないけれど まだ挑戦する気力があるなら以下のことを書いてくれ。 ・readのところで止まるとき、どんなエラーが出るか ・現時点でのソースコードはどうなっているか ・フォームを生成するHTMLはどうなっているか
>>724 部分的にでもコード晒せばいいのでは?
あとその昔のサンプルコードだけど今でも有効なはず。
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……
が見えないならどっかおかしい。
727 :
726 :05/02/04 19:01:51 ID:???
ちなみにHTMLはこんなの。 <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>
>>727 name="filename" じゃなくて name="file" じゃねーの?
729 :
728 :05/02/04 19:32:50 ID:???
すいません、ぼけてました。元質問者のレスかと思った。
730 :
711 :05/02/05 09:18:52 ID:???
>>725 今現在は、こんな感じです。
#!/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
731 :
711 :05/02/05 09:24:19 ID:???
>>725 で、ブラウザが真っ白な画面を出力して終わります。
なぜか.readをはずすとHTML出力まで行ってくれますが、
そのフォームを利用してファイルを送信するとまた真っ白な画面になります。
>>726 print ARGF.readではちゃんとそんなのが出てきます。
それを使えばjpgファイルへのデコードも可能ではないかと考えました。
みんな親切(涙)
>>731 おそらくは、パラメータに値(ファイル)が入っているかどうかを判定していないのが原因。
つまり、最初にCGIを呼び出したときには
file = cgi["file"][0]には空文字列しか入っていなくて
その空文字列に対してreadを送ったために、エラーで出力が止まった。
標準出力と標準エラー出力を、適当なテキストファイルに設定して確かめてみるといいかも。
$stdout = open('./output.txt', 'w')
$stderr = open('./error.txt' , 'w')
というか、とりあえずHTMLの表示とリクエストの受付は分けろ。 一緒にせずにUP用のHTMLファイルと受け付け用のスクリプトファイルにするのが普通だろ。 切り分けができないとテストにならないじゃないか。
手元ではこんな感じにしたら動いたよ。 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 は捨てた方が・・・
>>734 それだと 1.8 系だよね。1.6.8 だと、
file = cgi["file"][0]
になるんじゃないかな
>>735 申し訳ない、1.6.8 って書いてあったのね・・・
ここは標準ライブラリがバージョンに依存するインターネットですね
今思ったんだが、cgi.rbを捨てろ捨てろ言うよりも 自分用のcgi.rbラッパーを作った方が良い。 コア部分は歴史を重ねて、それなりに堅牢に出来てるんだから そのまま捨ててしまうのはもったいない希ガス。
CGI#params を使っておけば、バージョンに依存せずにパラメータが取れるよ
>>740 その方法だと、ファイルを送りたいときが問題になる。
……と思ってたら、ファイルを送ってもちゃんとparamsで受け取れるのか。
さっそくリファレンスマニュアルに書いてこよう。
742 :
711 :05/02/06 11:03:41 ID:???
参りました。 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"文。 これってひょっとしてバグ・・・?
>>742 > cannot generate tempfile `/tmp/CGI2732.9'
Windowsで使うことを考慮してないみたいですね>cgi.rb
>>742 そこまでくると、今度こそrubyインタープリタの問題か……。
mswin版の1.6.8で試してみることをお薦めします。
ちなみに俺の環境では、mswin版1.6.8(正式版)を An HTTP Daemonで走らせている。
745 :
711 :05/02/06 12:42:46 ID:???
mswin版だったんだけど・・・orz
>>742 CGIじゃなくて、tempdir.rbの仕様。
def initialize(basename, tmpdir=ENV['TMPDIR']||ENV['TMP']||ENV['TEMP']||'/tmp')
ソース見りゃわかるが、上記なので環境変数TMPDIR,TMP,TEMPと見ていって、無ければ/tmpが採用される。
なので環境変数で適当な存在するディレクトリを指定すべし。
747 :
711 :05/02/06 23:58:49 ID:???
>>746 で、できましたーーーーーーーーーーーーー!!!!!!
/tmpがないんだったら/tmpを作っちゃえばということで、
c:\にtmpっていうフォルダ作ったら解決しちゃいました!
みなさん親切にどうもありがとうございました!
>>744 の環境ではうまく動いているということは、
環境変数をいじっているかそれとも An HTTP Daemon がうまいことやってくれてるの?
749 :
711 :05/02/07 14:31:14 ID:???
そういえば、いくらローカルで動いてもレンタルサーバで動かなきゃ意味ないんだった。 レンタルサーバのルートにtmpディレクトリがなかったらアウト。 さすがにレンタルサーバの環境変数とかをスクリプトでいじったら怒られるよな・・・orz
tmpがない鯖なんかあるわけないだろ
なければ俺が作る! 誰にも邪魔はさせん! ていうか711は2chで人に聞いて場当たり的に解決しようとする前に、 本などでもっと体系的に勉強した方がいいですね。 環境変数とかの理解が間違ってるよ。
>>749 サーバが UNIX なら /tmp が無いなんてことはまずない。
Windows ユーザも OS インストールしたら、まっさきに C:\tmp つくるよなーふつー (´ー`)y─┛~~
754 :
744 :05/02/07 16:33:12 ID:???
>>748 後者。適当な仮想パスが割り振られている。
本当は、プラットフォームに依存する一時ファイル用ディレクトリパスを プラットフォーム非依存なライブラリに埋め込んでるのがおかしいんだけどな。 Windowsにも標準のディレクトリあるんだから、Rubyがそれをちゃんと使えば済む話。
1.8 なら Dir::tmpdir 使うから問題ないみたいだけどね。
757 :
711 :05/02/07 18:44:17 ID:???
サーバには/tmpが必ずあるんですね。安心しました。 ほんとうに何から何までありがとうございました。 まだまだご指摘のとおり勉強不足なのでこれを励みにまた修行にいそしみます。
このスレ長生きだなー
>>755 んだなぁ ( ´ω`)
%なんたら% を山椒汁
>>759 「%なんたら%」って何?
つーか、 1.8 と同じように tmpdir.rb を使えばいいんじゃないの?
shim に入ってるよね。
Windows環境変数のリテラルだよ
ENV['TMP']でおおよそ解決するのと違うか。
763 :
762 :05/02/09 01:36:57 ID:???
……すまん、脳味噌膿んjわ 回線切って(ry
>>764 同じ状況で試せなくて参考にならないかもしれませんが、
OSX10.3、Safari、Ruby 1.8.2という組み合わせでは
64キロバイト以上のファイルもうまく動きました。
環境かRubyのバージョンに依存した問題かな、
と適当に言ってみる。
ファイルパス回りだけ修正したら普通に動いた。 Windows + Ruby1.8.1 + AN HTTPDaemon 「ファイルを書き込むパスに問題がある」節を提案(論拠なし)
>>764 うちでも動いてる。
WinXP+Apache2+Ruby1.8.2
動いてるというか動くように修正したら表示されてるし保存ディレクトリに問題なく保存されてる。
>>765-767 回答ありがとうございます!
となると、OS依存かRubyのバージョン依存の問題のようですね
一応、Helpに書き足して置いて、後に回そうかな…
769 :
nobodyさん :05/02/13 16:08:07 ID:7Ta9le/g
ピーエイチピーやパールがあるのにわざわざルビーでシージーアイのスクリプトを書くメリットは? ルビーでないとできないことでもあるの?
ルビーがあるのにわざわざピーエイチピーやパールでシージーアイのスクリプトを書くメリットは? ピーエイチピーやパールでないとできないことでもあるの?
771 :
769 :05/02/14 08:18:39 ID:???
すいません、自己解決いたしました。 スレ汚してごめそ。
釣りじゃなかったのか・・・ なにが解決したのかすげー気になる
773 :
769 :05/02/16 15:57:36 ID:???
あ、いや、すいません。 ルビー使いにはルビーでシージーアイが書けることがすでにメリットなんだろうなーって勝手に納得しちゃいました。
ruby使いはコンプレックスの固まりだしな
コンプレックスというか、Ruby 以外では生産性が低すぎて書く気がしなくなる病気にかかってるんですよ
パッシブテンプレートはちょっと面白そうだな。
Amrita2がでましたので、折角だからRubyの色々なテンプレートエンジンで
変換速度を測定しました。
○測定内容
http://rubyforge.org/cgi-bin/viewcvs.cgi/amrita2/sample/hello/conditional.rb のテンプレートを100倍の長さにしたものをベースにして、
それぞれのテンプレートエンジンでパース&コンパイル
したときの時間を測定。
○結果
"ERB: 0.202999999999999"
"Amrita: 5.047"
"Amrita2
Push: 2.453"
Pull: 2.344"
"XTemplate: 1.359"
"Web::Template: 0.172000000000004"
"misen: 0.108999999999995"
"SikiTemplate
Memory: 0.390000000000001"
NoCache: 0.359999999999999"
Cache: 0.297000000000004"
結果がなかなか安定しないので、参考程度に……
misenの速さが目立ますな。何やっているんだろう?
Amrita2もそこそこ速くなっていますね。
>>779 おつ
パース&コンパイルの時間ということですが、実際の出力を生成する時間は含まれてる?
実際に使うときには、そこも結構問題になると思うんだけど。
たとえば ERB のようにコンパイル後の結果を保存できるなら、コンパイル時間はそれほど問題にならない。
Ruby のスレでは amrita の問題点として、コンパイルした結果に値をバインドするところが遅いという話も出てたし。
amrita の処理時間の感じでは、含まれた結果なのかな・・・
781 :
779 :05/02/19 03:49:56 ID:???
>780 >パース&コンパイルの時間ということですが、実際の出力を >生成する時間は含まれてる? 含まれます。 Amritaだと、この部分のutimeを測定しています。 time = Process.times.utime Amrita::TemplateText.new(amritatmpl).expand(r, { :groups=>model_data }) p "Amrita: " + (Process.times.utime - time).to_s
なるほど、含んでるのか。 そうすると速度が欲しいなら misen が良さそうだね〜
783 :
nobodyさん :05/02/19 10:59:16 ID:FeDqIee/
すみません。レス機能付きBBSを作りたいのですが、 Ruby製のいいお手本がありましたらどこにあるか教えていただけますか? Perlのはたくさん出回ってるけど、私には読めないので・・・orz 本文とレスの区別のないBBSはRubyCGI.orgでマスターしましたが、 レス機能をつける場合のスクリプトの書き方が思い浮かばないんです。
>783 確かに見付からんね…… ただ、 ・発言ごとに発言IDを付ける ・レスの場合は書きこみと一緒に発言IDをpostするようにeditページを作る ぐらいで対応できるんじゃない?
RubyでCMSって無いの? たださんみたいな人がもうちょっといないとRubyの将来は(ry
>>785 禿同。PHP製のCMSばかりやたら目立つのは気のせい?
787 :
783 :05/02/19 17:51:17 ID:FeDqIee/
>>784 なるほど。ありがとうございます。
(1)レス送信時に、どの本文へのレスであるかの情報(ID)も同時に送信。
(2)受け取ったIDからその本文のログのある場所を特定。
(3)そのログの次の行にレスを挿入。
こんなアルゴリズムでオッケーでしょうか?
ほかにも効率的な本文&レスを区別するログ管理の方法がありましたら伝授ください。
Ruby以前の問題なので、スレ違いかも・・・orz
DB使うの?
789 :
783 :05/02/19 19:52:09 ID:???
いえ、ログ管理はテキストファイルを直接操作します。
790 :
779 :05/02/19 20:43:07 ID:???
>777
>amrita2の解説
>
http://amrita.s14.xrea.com/d/?date=20041217#p02 テーブルの処理は面白そうだなぁ
良くある「シマシマテーブル」もこれでできるようになるかな?
自分のテンプレートエンジン(SikiTemplate)でも「シマシマテーブル」
できるような仕組み作ってみました。
……テンプレート側で指定できるのと、ロジック側でいじくるの、
どっちが嬉しいのかな?
require 'xml/simple-template'
# その指定が現れるごとに、[]の中に指定された
# テキストを順番に埋め込みます。
t = Template.new( '<r b="$n" c="@m|RotateValue[t1, t2, t3]"/>' )
p t.parse( {:n => [ true, true, true ] })
# =><r c="t1"></r><r c="t2"></r><r c="t3"></r>
[ruby-talk:131700] English-language Tofu information? Tofu & WEBRick についての、英語の情報がほしいとさ。 神降臨キボン
>>790 「表示のためのロジック」なので、プレゼンテーション側で行うべき。
ただしHTMLを汚したくないなら、Rubyプログラムのほうに書く方法でもよい。
どっちにでも対応しているのが理想。
> 複数箇所に同じデータを代入するようなケースに対応できませんが…… > #ページのタイトルと大見出しを同じにするとか 異なるID属性に同じ値を割り当てれば済む話。 もしくは、ID以外の属性を使用する。 そもそも、『ID属性が重複してしまうことがある(名前の衝突を気にしないといけない)』、 だから『重複が簡単にチェックできるID属性が逆に好ましい』という話の流れだ。 そこに『複数箇所に同じデータを代入できない』というのは、ID属性つながりではあるが論点が違う話だろ。 そもそもこんなのは、異なるID属性に同じ値を設定できないようなテンプレートシステム自体が悪いのであって、 ID属性を使うこと自体はまったく悪くない。 > それはプログラム側で対応しろということかな?Kwartzには無いよね? 方法1: #title { value: str; } #h1 { value: str; } 方法2: <title kd="value:str">ヘッダタイトル</title> <h1 kd="value:str">本文タイトル</h1>
794 :
nobodyさん :05/02/22 23:30:21 ID:Tjgj+8tn
795 :
794 :05/02/23 17:59:57 ID:PD4NA/SP
796 :
nobodyさん :05/02/24 22:20:50 ID:LIVjVx8+
essaさんの余力をブログにつぎ込んで欲しいようなAmritaにつぎ込んで欲しいような、複雑な気分です。
798 :
の :05/02/26 15:44:54 ID:???
>>798 $$@とか覚えられそうにないなぁ、というのが感想。
あと、SikiTemplate::Executeのサンプルコードが分かりにくい。
"sample".to_s の結果が展開されるっていわれてもうれしくないし、
というか最初なにをやっているのか理解できなかったです。
で、ためしに実行してみると動かないし。
> ruby test.rb
./siki-template.rb:622: warning: character class has `]' without escape
test.rb:4: uninitialized constant Template (NameError)
サンプルはこういうのの方がいいんじゃないかなぁ。
t = Template.new( "<r class=\"$m.iso8601\"/>" )
Template.use_execute = true
r = t.parse( { :m => Execute.create( Time.now ) } )
p r # => "<r>2005-03-03T01:55:55+09:00</r>"
800 :
の :05/03/04 01:18:35 ID:???
>799 さんくす >$$@とか覚えられそうにないなぁ、というのが感想。 やっぱり難しいかね…… いっそのこと 1.<!--++変数++-->で弟タグに変数名を埋め込むのが 普通の使い方 2.$$@とかはタイプ量を減らすための略記法 とかにしたほうが良いかしらん…… >あと、SikiTemplate::Executeのサンプルコードが分かりにくい。 確かにそうですね。修正しました。 ついでに変なWarning出ているのを修正しますた。
801 :
798 :05/03/04 14:47:01 ID:???
マニュアルをコメントタグ中心にしました。 ついでにコメントタグも、 <!--__title__--> に変更して 見やすくしますた。
>>800 覚えにくいというよりは理解しにくい。表記法は二の次。
説明がへたでわかりにくいのか、そもそもの設計がわかりにくいのかはしらん。
803 :
798 :05/03/06 14:50:51 ID:???
>802 説明がへたでわかりにくい、つうのはあるわな…… 今作っている英語版をベースに書き直しマスタ。
>>802 さん
どのへんが理解しにくいでしょうか。例えば。
Rails難しい・・・英語が。
>806 CGIを洗練したものかしらん?
RoR の scaffold みたいなもんかね。 モックアップの作成に使えそう。
809 :
の :2005/04/03(日) 14:07:10 ID:???
SikiTemplateをRails対応にしてみました。 と言ってもerbとのギャップはいかんともしがたいなぁ ヘルパーツールを強化してみるか……
Railsをapacheで使おうとしたらmod_rewriteの設定がいるっぽいんだが、 どう設定していいのかわからん。
811 :
の :2005/04/10(日) 15:58:39 ID:mwz/LZVr
φ(。_。) SikiTemplateのモデルデータ構築方法を改造しました。 従来のHash/Arrayを使った方法以外に [], []=, <<を使った方法を追加シマスタ。 こんな感じ t = Template.new('<r><a t="$n">Test<a class="$m" attr="m">case</a></a></r>') t = Template.new('<r><!--__n__--><a>Test<a class="$m" attr="m">case</a></a></r>') t.modeldata[:n][:m] = "C1" t.modeldata[:n] << "test2" t.modeldata[:n] << "test3" assert_equal( t.parse, '<r><a>Test<a attr="m">C1</a></a><a>test2</a><a>test3</a></r>') これでモデルデータを構築するときの違和感が減ると思うけど、どうよ?
>>810 チュートリアルに書いてあるとおりじゃないの?
どこがわからない?
cgikit2はもはや別物のような気がする
漏れはcgikit1をよく知らないのであれだが 2のサンプルについてきたCKWikiのソースを追っかけていてかなり迷子になった。 cssを読めてないんでなぜかと思ったらApplication#document_root他の設定が足りなかったのと WikiPage#cssでちょいと手を入れてやらないといけなかった(これはディレクトリを奇天烈な構成に したせいだがorz ともあれ、今後自分でRubyコード書くときは引数のないメソッドを呼ぶときも()付けようと決意した一日だった。
>>783 >>787 亀レスですまんが・・・
Rubyには強力なオブジェクト指向があるのだから
単純にこうすればいいのでは?
class ParentArticle < Article
attr_accessor :childs
end
class ChildArticle < Article
end
で、記事の保存にはYAMLを使えばオーケー
> で、記事の保存にはYAMLを使えばオーケー 本気で言ってる? 文字コード変換しなきゃいけないし、データ全体で読み書きするしかできないから、 こういう用途としては最低な部類に入るデータフォーマットだと思うのだが。
案件で CGI というより mod_ruby を使おうと思っています。 ruby の大規模での実績例とかありますか? ruby を使っている商用巨大サイトの URL だけでも構いません。 よろしくお願いします ( ruby-lang や RAA しか思いつかなくて )。
>>816 データ全体を読み込まなくてはならない問題は、親記事ごとにファイルを分ければ解決できる。
あるいは記事保存用のファイルを別に作るとか。
(articles_info.yaml, article001.txt, article002.txt, ...)
文字コードの問題は確かにあるな・・・
Unicodeへの変換って、なかなか簡単には行かないみたいだし。
とすると、YAMLよりもPStoreか。
>>818 UTF-8のデータのみを扱えば変換する必要ないと思うんですが、
そういう話じゃないんでしょうか?
>>819 ライブラリに合わせてアプリケーションの仕様を変えるわけですね。
すばらしい考え方ですね。
プ
俺はこういうキテガイを相手にするのが嫌でPythonに乗り換えて今は幸せです。
>>818 初心者のようなので念のため書いておくと、
通常、文字コード変換はデータの入口、CGIならばPOSTメソッドのparameterをdecode
した時点でする。生のままストレージに書き込むことはしない。
メールなんかは電子署名等の都合があるので変換せずに保存するが、CGIでそういうことはしない。
822 :
818 :2005/04/30(土) 15:24:09 ID:???
>>821 私のようなキチガイ初心者のためにも、もう少し端的にお願いします
>>820 既存のアプリを変更する、という話でしたか。
一から作るという話だと思ってました。すみません。
最近perlからrubyに移ってきた者ですが、 rubyでブロックとローカル変数が作れなくて困っています。 どこかにruby-lang.org以外で 変数のスコープとブロックについて書かれた資料は無いでしょうか?
初心者なら素直にMatzのRuby本買って読めよ。
>>823 いや、たぶん820の言ってるのはそういう事ではなくて
yaml.rbがUTF-8限定だからといって、アプリケーション全体でUTF-8を扱うようにするのは
あまり良くない考え方ではないか、ということだと思う。
諸々の理由でSHIFT-JISを使わなくてはならないとき
(またはどう考えてもSHIFT-JISの方に軍配があがるとき)
どうするんだ、って話。
yaml 使うの止めればいいだけかと。
r(ry
>>828 面倒な事をするくらいなら最初から決めておいたらどうでしょう、
最初から作るなら決めうち出来るのではないか、という意図でしたが、
話の前提から勘違いしてましたね、すみません。
832 :
nobodyさん :2005/05/04(水) 13:29:45 ID:GxxcKWgP
すいません。 CGIでブラウザにHTMLデータを返すときにprintを使っているのですが、 そこで「表示」とか「申し」と入れると、 「侮ヲ」とか「垂オ」に文字化けしてブラウザに返しちゃうんです。 そこで、kconvライブラリを取り込んで print "表示申し".tosjis ってやってみたけどダメでした。=> 侮ヲ垂オ これの解消方法ってないですか? 不思議とフォームに「表示申し」と書いて送信するとそれは正しく受け取ってくれて ブラウザにもきちんと「表示申し」と出てきます。 ふつうのひらがなや簡単な漢字とかだとこうはならないんだけど・・・ バージョンは1.6.8、OSはWINXP、ブラウザはIE6です。 まだローカルなパソコンで試している段階で、サーバはApache2.0です。
>>832 CGI のソースにリテラル文字列で Shift_JIS で "表示" とか "申し" とか書いてるの?
であれば、スクリプトの冒頭で #! ruby -Ks とかする。
834 :
832 :2005/05/04(水) 14:10:28 ID:GxxcKWgP
>>833 ありがとうございます。
一行目に入れてみましたが、Internal Server Errorとなってしまいました。
そこで一行目は元のパスに戻して、今度は二行目に入れてやってみましたが、それでも症状は治りませんでした。
しくしく・・・
>>834 んー、もしかして伝わってなかった?
#!/usr/bin/ruby
だったら
#!/usr/bin/ruby -Ks
みたいに -Ks オプションを付ける、という意味なんだけど・・・
836 :
nobodyさん :2005/05/04(水) 15:03:10 ID:RNwfWiBH
パス名はrubyだけ? /usr/local/bin/rubyとかフルパスじゃナイからってことじゃないよね。念のため
837 :
832 :2005/05/04(水) 16:38:32 ID:GxxcKWgP
>>835-836 ありがd!
#!/usr/bin/ruby -Ks
で直ったー!!うれしい。
#!ruby -Ks
#!/usr/local/bin/ruby
のことだと思ってました。ははは・・・。
839 :
nobodyさん :2005/05/05(木) 17:23:25 ID:9E2Z1NIH
どなたか更新ボタンで再アクセスするときにはカウンターが回らないようにするよい方法を教えてください。 ENV["HTTP_ACCEPT"]が"*/*"だったときにはカウンターを回さない、ってやるのは乱暴かなあ。
>>839 過去一定時間(例えば1時間)分のアクセス者のIPアドレスを残しておいて、
そのログに含まれているものと同じIPアドレスからのアクセスはカウントしない、
とか。
841 :
839 :2005/05/05(木) 22:28:15 ID:???
>>840 なるほど。ありがとう。
でもそうすると1時間以内だったら更新ボタン以外で再来訪してくれたのもノーカウントになっちゃうね・・・。
逆に一時間待てば更新ボタンでもカウントされてしまう・・・。
連打でカウントを不必要に回されるのだけは防げるからそれもよしか。
うまく「更新ボタンで来ました!」ってのを拾う方法ないかなあ。
完璧な方法はありえないと思って適当なところで妥協するのが得策と思われ。
cookieでもつかったらどうよ
844 :
nobodyさん :2005/05/07(土) 21:42:42 ID:sZVuGBZq
ファイルアップローダを作っていますが、アップロードされたファイルの拡張子を示す文字列(jpgなど)を得るにはどうしたらよいでしょうか? サーバに保存するときのファイル名の拡張子としてその文字列を使いたいのですが・・・。
/¥..+¥z/.match(CGI.new.params['hoge'][0].original_filename).to_s
846 :
844 :2005/05/07(土) 23:56:55 ID:sZVuGBZq
847 :
nobodyさん :2005/05/08(日) 00:49:55 ID:Dhx+t1nV
848 :
nobodyさん :2005/05/08(日) 22:27:52 ID:sbu4QGJH
ケータイから画像をEメールに添付して送信すると掲示板にアップロードできるようなCGIってないかなあ・・・。
Eメールって時点でCGIじゃないけどな。
あれ、、無いの? 仕事でやったことあるけど、流用はまずいので一から作ろうかな・・・
噛み合ってないな
>>846 最初に質問するときはしょうがないにしても、
お礼をいうだけでageないで欲しいな。
山田もくるし。
途中のページから入られるのを防ぐ方法として、こういう実装ってどう? 1 送信方法はPOST 2 ページの移動は常にSUBMITボタンで 3 送信先CGIのURLは常に自分自身 4 送られてきたデータにより読み込むテキストファイルを変える 5 読み込んだテキストをCGIスクリプトとしてevalで実行 クッキーもURLも使えない場合はこの方法しか残されていない希ガス。
>>854 「この方法しか残されていない」ってことはないのと、あと、 5 が意味わからん。
856 :
854 :2005/05/11(水) 00:49:43 ID:???
ブラウザがアクセスするCGIスクリプトはひとつなんだけど、そのスクリプトがPOSTで送られてきたデータによって全く異なる挙動をするということ。 例えば書き込みを行う場合は、書き込みを行うスクリプトが保存してあるテキストファイルを読み込み、一行ずつevalするっていうイメージだったんですが・・。 ほかにもあるのねorz 逝ってきます。
そのまま他のスクリプトを実行すりゃいいじゃねーか
>>856 あらかじめ同じファイルに含めてしまうとか、
requireとかloadとか。
あと、
>>854 の手法ってどの状態が「途中」であるかということに
触れられていないような気がしますが、
その辺も含めて書いてもらえると嬉しいです。
859 :
854 :2005/05/11(水) 15:49:20 ID:???
あ、途中というのは会員専用サイトなどでIDやパスワードが通ったあとのページのURLに直接入られるような場合を想定しています。 そういやrequireがあったね。ありがとん。
意地張ってないで Cookie 使おうよ。
携帯用のページでそれ(loadで分岐)やってた。 途中に入られるのもそうだけど、 エージェントでこまかくわけてたからなー
POST データを ENV に入れて exec() とかできるかも。
863 :
854 :2005/05/11(水) 21:38:25 ID:???
>>860 ドメインが違うページ間を行き来するセッションには使えないし、
クライアント様のパソコンを出来るだけ汚したくないってのもあるし、
クッキー非対応にブラウザを設定している人たちもいるだろうし、
・・・
ということです。
意地張ってないで Cookie 使おうよ。
>>861 case〜when〜end使って似たようなことやってる。
ふつうにテキストファイルを置くとページは見れなくてもURLが合ってたらスクリプトが丸見えになるからね。
ブラウザが読めないように拡張子変えて偽装すればいいんだろうけど・・・
テキストファイルの拡張子を.JPGとかにして置いとくのは見え見えかなあ。
>865 >URLが合ってたらスクリプトが丸見え ……それは流石にまずWebサーバの設定で弾いておくところじゃないか? (汗)
case〜when〜end は多態で実装し直せとベックおじいちゃんが言うたはりました。
ブラウザから見えないとこに置けばいいだろ .htaccess 使ってもいいし、 直接呼ばれたかわかるようにしてエラーなりフォワードなり 送ってもいいし
>>868 レンタルサーバってなんか特別なんすか?
例えば~/public_html以下にしかファイルを置けないとか、
ホームディレクトリ以下がwebで公開されているとか。
そうではなくて、web公開用ディレクトリ(例えば~/public_htmlとか)と
その他のディレクトリ(例えば~/dataとか)を使えるのであれば、
CGIスクリプトは前者、そうでないスクリプトは後者に置く事で
うっかり見られてしまう自体を防げるのではないでしょうか。
>>870 >例えば~/public_html以下にしかファイルを置けないとか、
そういうところもあります。
872 :
848 :2005/05/15(日) 18:09:04 ID:???
>>849-851 質問を変えます。
考えているのはこういう工程です。
(1)ユーザーは、あるメールアドレスに件名、本文、添付画像をケータイから送信します。
(2)管理人は随時、そのメールサーバにアクセスして、送られてきているデータを収集します。
(3)そのデータをひとつひとつ掲示板にアップロードしていきます。
(もちろん利用規約で、ケータイメールによる書き込みはタイムリーに行われないことはユーザに知らせておきます。)
この作業は当然ローカルパソコンで手作業すれば可能なんだけれど、(2)(3)のあたりはCGIプログラムで自動処理できないものかと。
出先からでもケータイでそのCGIにアクセスすれば溜まってる書き込みメールが自動でアップロードされるようにしたいのです。
>>872 Kから直書きじゃダメなの?
tDiaryみたいな...
cookieがいやなら、一回しか使えない鍵をhiddenで渡せばよいのでは?
メールサーバと CGI のサーバが一緒なら割と簡単にできるかもね。
cgi.rbが微妙だということを見て、 自分でGETとPOSTのデータを受け取る部分(ファイルアップロード含む)とクッキー操作の部分そしてセッション管理の部分まで書いたのが、1-2年前のことです。 しかしそれからCGIには全然手を出していませんでいた。 最近になって、ふとCGIを公開するHPでも作ろうかなと思い、自分で作ったcgi.rb相当のものを使おうかなと思っていたのですが、 よくよく考えると、CGIしか考慮していませんでした。 Rubyist Magazine に Nora というものの説明があって、CGI/mod_ruby/FastCGIに対応と書いてありました。 このライブラリでも使ってみようかなと思い、DLしようとしたのですが、作者のHPにもRAAにもないようです。 もう配布はしていないのでしょうか? 他にシンプルでCGI/mod_ruby/FastCGIに対応したものはないでしょうか?
881 :
879 :2005/05/17(火) 22:59:58 ID:???
すみません、よくみていなかったようですね; DLできました。 ありがとうございます。
自作cgi.rbとはスゴい。 私は今ログファイルのマネジメントができるクラスを開発中ですが、rubyのスキルがまだまだしょぼく、いいものができません。 インターフェイスとしては、最初に log = Log.new(ファイル名) としとけば、以後 log.put(行,列,値) でファイル(テーブル構造)の任意の場所に値を書き込むことができ、書き込み時にはファイルのロック、アンロックも自動でやってくれるという至極モノグサなクラスなんですが・・・(他にもフィールド定義等多数メソッドあり) もしこれに類似したクラスライブラリがすでにあるのであればその場所をご教示いただければ幸いです。
任意の場所に書くものをlogって言うかなあ
logじゃなくてDBだな
掲示板の過去ログみたいなものかな。
漏れなら迷わず SQLite3 だが・・・
888 :
882 :2005/05/19(木) 16:09:49 ID:???
用語が間違ってたみたいすねorz CGIで扱うデータファイルは全部ログと思っていました。 要はこういうクラスを使って掲示板、日記、プロフィール、お気に入りリンク集、アクセスカウンタ、更新履歴といったコンテンツをテーブル化して貯めておくテキストファイル(なんていえばいいんだろう)を編集できたら便利だろうなとおもったのです。 出直してきます・・・。
>>888 不定長なデータ全てをひとつのテキストファイル(なんていえばいいんだろう)に
突っ込んで管理してしまおうということなのかな。
そういうのは別々のファイルにバラして持っておいた方が良いと思うけどなあ。
漏れなら迷わず SQLite3 だが・・・ (しつこい)
おー、実は俺もそんなの作ってる・w > ファイル操作ライブラリ ランダムアクセスでファイル操作するやつで、 レコード毎のカラム以外に、ヘッダ部分にも型を宣言して領域を確保できるようになっていて、 他に掲示板とかに便利だろうと双方向リスト型なんてのも作ったよ。
スレ違いっぽい気もしますが、 静的コンテンツをマネジメントするのによさげなフレームワークなんてありますかね?
んーと、マネジメントって具体的に何するん?
894 :
888 :2005/05/20(金) 19:11:14 ID:???
>>889 あ、それはさすがにないです。テーブルはコンテンツごとに作成し、1ファイル1テーブルです。
・・・たしかにこのクラスを継承すれば簡易DBのようなものが作れるかもしれません。
素直にDB勉強しようかな・・・
895 :
888 :2005/05/20(金) 19:15:10 ID:???
DB使うともうそんなこと考えるのもいやになるくらい便利
898 :
882 :2005/05/22(日) 08:23:00 ID:???
「ログ」は意味が違うようなので、クラス名は無難にTableにしました。 DBを使わなくても気軽にテーブル(csvファイルなど)の任意の行や列やセルが読み書きできるクラスです。 table = Table.new(ファイル名,区切り符) で、以後そのファイルは table.〜 で、ロック/アンロック、レコードやフィールドの挿入/削除、といったあらゆる操作が可能となります。 ・・・てか、誰でも思いつきそうなクラスなんだけど、ほんとに既存のものはないのかなー。 unixな人たちはosに標準でついてるDBMがあるから需要ないのかな? まあ、これくらい自分で作ったとこでRubyの練習にはちょうどいいんだけど・・・。
900 :
882 :2005/05/22(日) 09:27:32 ID:???
>>899 ありがとうございます!1.8系から標準添付なんですね。
しかし使わせてもらってるサーバーのRubyはまだ1.6系・・・orz
901 :
890 :2005/05/22(日) 10:39:03 ID:???
>>895 詳細キボンといわれても、どういうこと書けばいいんだか;
どこにも公開はしていないですよ。
ただ、どこかにそれを使った掲示板はあます。
ちょっといろいろ難点があって再構築しようと思っているところです。
カラム名を指定するのを、文字列ではなく、シンボルにしようかなーとか。
>>901 どんなメソッドがあって、それぞれどんな動きをするのか、とか、使用例とか。
ぜひ参考にしたいので。よろしければおながいします。
>>902 ありがとうございます。
まだ挙動の研究中ですがこのクラスがあればかなりラクになりそうです。
904 :
903 :2005/05/23(月) 22:25:46 ID:???
>>899 >>902 うむむ・・・ひょっとしてcsv.rbってcsvをパースするだけ?
.add_rowで追加したいデータを渡してみたけどもとのファイルには変化なし・・・orz
最後にgenerateするまでファイルの更新はしないようです。
欲しかったのとはちょっと違いました。ごめんなさい・・・。
僕がほしいのは、掲示板の書き込み内容を
ary = ["2005/05/23","903","
>>902 <br>うむむ・・・ひょっとして(略)","sage"]
と配列にしておけば、
Table.insert_row(5,ary)
でログファイルの6行目にaryの各要素がカンマでつながった文字列が直接挿入されるといった感じです。
メソッドの実行と同時にファイルのロック、オープン、書き換え、クローズ、ロック解除を行うものです。
やっぱ自分で作るか・・・
そこでSQLiteですよ
>>906 ごめん、前半は勘違い。無視して下さい。
なんでSQLiteはことごとく無視? バカ?
↑それって誰かが書いたRubyのクラスか何かですか? スクリプトと一緒に置いとけば使えるようものならいいんですが、サーバーにインストールしないといけないのはちょっと・・・自鯖じゃないもんで。
>>908 諦めろ。バカには何度言っても伝わらない。
バカがSQLiteを使えるわけがないという所まで思い至らないのは間が抜けている
それは確かに・・・
以後、 SQLite ネタはスルーということでよろしく。
じゃあ、dbmで
>>914 dbm使ってたらSEGVしたんですけど。
もしかしてSolaris?
みんなDBが好きなんだね。
SQLite 標準添付まだー?
バカでごめんなさい・・・
謝る前にgoogleの使い方ぐらい覚えろ
SQLiteやたら出てくると思ったらやっぱりネタだったのか。
俺はここにきて数スレみてSQLiteを薦めたが、こんなに出てるのは書いてから知ったよ
なんで SQLite なんだ? このスレッドなら断然 AAA、XREA、lolipop で使用可能な MySQL のほうがお勧めなんじゃないのか?
DBの話はとりあえずヤメレ
なんでスルーになってるのかをとりあえず説明すれ
既存の優れたアプリを受け入れ、操作に習熟するよりも先に、同じようなものを自分で作りたがる非生産的な人。 Ruby使いにはそういった類の人間が比較的多い希ガス。 きっとDBよりも独自スキーマでごちゃごちゃと訳わからんことすることの方が好きなんだと思う。
927は過去になんかあったのか? いったい何の説明してるんだ? MySQL じゃなくSQLite の話じゃないし、SQLite スルーの話でもないしな。 cgi.rbが1.6と1.8で挙動が違うなら、cgi.rbの代替が必要になってくるのは当然だし、 どこのレンタルサーバでも動くようにするには、標準ライブラリか、Pure Rubyなライブラリ使うのは当然だしな。
おまいらなんのはなしをしているんですか?
過去の経緯は知らんが。 SQLiteはいいものだが板違い。 db板にスレがあるから行ってこい。 DBI-sqliteについての話だったらム板へ。
1.6と1.8で挙動が違う部分って、何? cgi.params["name"][0] ってやればどっちでも大丈夫なんでしょ?
934 :
932 :2005/05/31(火) 22:15:56 ID:???
>>933 ありがd
読んだけどよくわからんかった;
挙動が違うのはcgi["name"]って書いたときの話ですよね。
しかし、「1.6と1.8両方で動くスクリプトが書けない」っていうくだりは本当ですか?
レシピブックにはcgi.params["name"][0]って書けばオッケーって書いてあったんだけど・・・
>>934 「1.6と1.8両方で動くスクリプトが書けない」というのは
リンク先にもあるようにCGI#[]を使うときの話。
>cgi.params["name"][0]って書けばオッケー
言い方を変えれば「CGI#paramsを使わなければダメ」。
あと既存のスクリプトがCGI#[]を使ってたりすると、
いちいち修正したりするのも億劫だよね。
そこのところを気に入らない人はいるんじゃないかと。
なるほど。 しかしcgi[]の[]ってメソッドなのな。 Rubyは奥が深い・・・ どんなメソッド定義してるのか今度みてみよっと。
>>935 いちいち修正して億劫というのが、あちこち修正という意味なら、
1.6の方に CGI#[] を定義すればいいだけじゃねー?
RubyCGI.orgの
http://www.rubycgi.org/cgi_explanation/3-5.htm から
一部コメントを付け加えて抜粋。
#書き込みがあったら
if senddata
begin
#ファイルロック設定
lockd = fillock.lock(LOCKFILENAME)
unless lockd
print <<EOF;
<html><body>
他の人が書き込み中です。しばらく待ってからもう一度書いて下さい。
</body></html>
EOF
end #unless end
#ログファイルの書き込み関数を呼び出し
write_log_file(senddata)
ensure
#ファイルロック解除
fillock.unlock(LOCKFILENAME) if lockd
end #begin end
end
これ、正しくファイルロック出来てるんでしょうか?
このままだとロックの状態に関わらず書き込み関数を呼び出して
ファイルをいじってしまうように思うんですが・・・。
FILELOCKで示されるディレクトリを作ってためしてみたら?ちゃんと動くはずだけど。 このプログラムは無理にクラスとかメソッドを定義しててわかりにくいね。 手続き型で書いてもRubyはきれいに書けるんだけどな。
940 :
938 :2005/06/10(金) 08:56:02 ID:???
>>939 そっか、自分でディレクトリ作ればいいんですよね。
何でそんな単純なこと思いつかなかったんだか・・・。
ありがとうございます。
で、実際にやってみたところ
やっぱり正しくファイルロックできてないみたいで、
ディレクトリの有無に関わらずガンガン書き込んでます・・・。
unless lockd
今は書き込めませんメッセージ
else
write_log_file(senddata)
end
多分こんな風に、書き込み関数をunless elseの中に入れちゃえば
正しく動くんじゃないかと思います。(試してませんが)
クラスや関数を作りまくってるのは
「作り方を学ばせるためにあえて」
ってことだと僕は思っているんですが・・・、
人によっては「これが良い書き方なんだ」って勘違いしちゃいそうですよねえ。
>>940 そのコードはダメポ。
せっかく全体をbeginで囲っているんだから、例外的事象(ロック失敗)に対応する
コードはrescueブロックに配置すべき。
そのためには、FileLockDir::lock の中で、ロックに失敗したら例外を投げる
ような仕様にするのがいいと思う。
FileLockDir自体、initialize(ファイル名) にして、lock/unlock に引数が
いらないようにしないと、わざわざインスタンスを生成する意味がないし。
942 :
940 :2005/06/10(金) 12:14:40 ID:???
>>941 アドバイスありがとうございます。
>コードだめぽ
これは
「お前の書いたコードじゃ正しく動かねーわ」って意味ですか?
それとも
「そもそもサイトのサンプルコードからしてゴチャゴチャしてるから
そっから考え直して、まとめた方がいんじゃね」
って意味でしょうか?
943 :
941 :2005/06/10(金) 12:29:50 ID:???
>>942 すまん、サンプル自体がまずいと言いたかっただけだよん。
944 :
942 :2005/06/10(金) 12:38:31 ID:???
>>943 確かにサンプルコードを基本にして手を加えていくと、
どうもきれいにまとまってくれません・・・。
構造から考え直してみます。
しかし、ネットで拾えるまとまったRuby&CGIの入門用資料ってこのサンプルくらいしかないよなー。 漏れもそのページから入ったクチなんだけど、最初はクラスとかメソッドとかわからんからとりあえず部品を全部ばらしてみたもんだ。 表面上のRubyらしさをムリヤリ加味するとこんなコードになるという生きた見本。いろんな意味で価値あるサンプル。 漏れはこのサンプルに感謝しているよ。
CGI抜きにして「Ruby入門サイト」を探しても、かなり少ないしね。 しかも大体古くて、今はもう更新されて無いようなところばかり。 さすがにこの現状は切なすぎる・・・。 誰か新しく入門サイト作ってくれないかな。 (・・・と、他人に期待するばかり)
>>945 ムリヤリとかいろいろな意味でとか、変な皮肉はヤメレ
>>946 本スレで出てた気がするが、
Rubyの入門としてはこれを押す。
tp://www1.tf.chiba-u.jp/~shin/tutorial/
これ自体は CGI スクリプトみたいだが。
>>946 入門サイトって似たり寄ったりな内容じゃない?
定番があれば十分で、数が多くても意味がないと思うけどなあ。
>>949 日本語のRubyの入門サイトの中で定番といえるほど有名なものってある?
>>949 サイトが増えると、サンプルが増える。
あと、ユーザーのレベル・好みでサイトを選べる。
(プログラム初心者ってわけでなければ
『一時間で覚えるRuby』でもいいわけで)
俺が思い付くのはこれくらいかなー。
もちろん「質より量だ!」なんて言うつもりはないけど
数は多いに越したことないと思うよ。
メールフォームを作りたいんですが、いい資料ありますか?
つ rfc2822
957 :
nobodyさん :2005/06/19(日) 13:13:02 ID:Le0SqOYO
WEBrick でCGI (servlet?) を書こうと思ってるんですけど、 どうもCGIの処理が完了してから纏めて全部出力しているようです。 これって少しずつ逐次出力することはできないでしょうか? 帯域を制御してストリーミングがしたいのですが。
まさかTCPのバッファリングを制御したいとか、そういう話しじゃないよね?
そこまで低レベルなレイヤーでないと制御できないことなのですか? 帯域制限はCGI 側で行うので、httpdは即座にデータを送出してくれれば それで十分なのですが。 それと、出力全体がバッファされると言うことは、送るデータのサイズと 同じだけメモリを消費するわけですよね。 これでは実質数十MBくらいが限度です。 どうにかならないものでしょうか。
WEBrick は素人なんだけど、 res.body に IO のサブクラスを指定すると、 IO から少しずつ body を返すようになる気がする。 webrick/httpresponse.rb の WEBrick::HTTPResponse の send_body とか send_body_io とか見てみると良いかも。
IOからサブクラスでreadとcloseを再定義することで解決できました。 どうもありがとうございました。 ちなみに最初は単に IO.pipe の入力側を渡してでマルチスレッドに するつもりだったのですが、先に入力待ちするとデッドロックします。 pi, po = IO.pipe t = Thread.start { print while (Thread.stop or pi.gets) } po.puts "first" t.wakeup # OK t.wakeup # dead lock po.puts "second" これはこういうものなのでしょうか? IO.popen('-', 'r') も動かないし、windows版の制限なのかな。 WindowsXP SP2, Ruby 1.8.2 (ActiveScriptRuby 1.8.2.0)
上のコード、IRB上なら止まるんですが、直接実行だと動きますね。 これでどちらもデッドロックするようです。 t.wakeup # OK sleep 1 t.wakeup # dead lock
ロリポップがサーバーのバージョンアップ及びモジュール追加ってやつで、 ruby (1.8.2)に対応したみたいで・・いいことなのですが、 なぜかそれ以降動かなくなったCGIが出ました; ローカルでのテスト環境は 1.8.1 で、それで動いているのですが動きません。 一番上のパスが違うのかなと思ったら、他のRubyで作ったものは動いていました。 何らかの実行時のエラーで落ちてるのかと思い、全体を begin # 全体の処理 rescue Exception File.open("erorrlog/#{Time.new.to_i.to_s}.err", 'w'){|f| f << "#{$!}(#{$!.class})\n#{$@}"} end ってな感じでログを残そうとしても、ログが残りませんでした;; かなりお手上げです。詳しい方、教えていただけたら幸いです。
>>963 ログは見れないの? rescue できないとすると文法エラーかな?
965 :
963 :2005/07/04(月) 01:28:46 ID:???
うーん、なんかヒアドキュメントで文法エラーが出てるような・・ ローカルでも 1.8.2 で試したけど動きましたが・・OSによって違うのかな・;
>>965 ロリポップにログくれって言えないの?
少なくとも同じバージョンなら違うマシンでも文法は同じはずなので
同じバージョンでテストしてますよというのを伝えた上で、ロリポップにその辺聞いて見れ。
967 :
963 :2005/07/04(月) 23:58:18 ID:???
あ、やっぱヒアドキュメントじゃないっぽい; #!/usr/local/bin/ruby -Ks -Ilib ↑の1行目のオプション -Ilib がまずいっぽい・・ような・? やはりこれもローカル(windows)では動いてます; ちなみにロリポップにはまだ聞いてません。すまん。
>967 思い切って別PCにLinux入れてみるとか、あるいはcoLinux入れてみるとかして UN*Xな環境作って試してみるのはどうか。
>>967 -Ilib じゃなくてフルパスで指定してみたら?
CGIを別名にリネームして、元のCGIファイル名で次のようなのを作る。 #!/bin/sh exec リネーム後のCGI > ログ.txt 2>&1 CGI実行後に ログ.txt を見る。
971 :
963 :2005/07/06(水) 00:09:55 ID:???
-Ilib のオプションを使わずにしたら、いままで動かなかったものがすべて動きました。
>>970 さんのものも試してみましたが、500エラーというのが出て、ログは残りませんでした。
どうして、-Ilib が使えないのかはわからないままです;
lib ディレクトリに 1.8.2 で動かない古いライブラリが入っていたと想像。
マルチパートなフォームのデータを送信した場合、スクリプト内の CGI.new のところで in `read_multipart': no content body (EOFError) というエラーが出ますが、これは何ですか。 環境は WindowsXP + Apache + Ruby 1.8.2 です。
974 :
973 :2005/07/18(月) 17:27:49 ID:???
【つづき】 原因究明のために cgi.rb の 976 行目付近 status = stdinput.read(boundary_size) if nil == status raise EOFError, "no content body" elsif boundary + EOL != status raise EOFError, "bad content body" end での、status 変数について調べました。 if 文で評価される前の status は String で、 "malformed header from script. Bad header=-----------------------------7: index.cgi" という値でした。 しかし,条件文にさしかかったところで status 変数の中身が nil になってしまうようです。 print 文で status 変数の中身を表示させてみましたが、一回目の print 文で上記の文が出るものの、二回目以降は何も表示されませんでした。 どなたか原因と解決策をご存知の方、ご教授ください。
最小再現コードがあれば誰か調べるんじゃない
976 :
973 :2005/07/18(月) 18:19:41 ID:???
>>975 最小再現になるようにコードを追っかけていたところ、
エラーの発生箇所が思っていたのと違う箇所だということがわかりました。
エラーが発生したときのエラー表示のために
CGI クラスを使っていたのですが、
もう一度 CGI.new したときに、上記のエラーが発生していました。
因みに、このとき最初に rescue していたエラーは
cannot convert StringIO into String
で、まったく別物でした…
出直してきます…
977 :
nobodyさん :
2005/08/09(火) 20:04:29 ID:3fd1ZKC+ 質問させていただきます。 open-uriによってカウンターがついているウェブページの中に、カウンターを更新させないページがあることに気づきました。 どなたか理由と、どうすれば反応するようになるか教えていただけますでしょうか? よろしくお願い致します。