【Ruby】RubyでCGI
レス数が900を超えています。1000を超えると表示できなくなるよ。
0001名無しさん@お腹いっぱい。
2001/05/04(金) 12:57ID:c4hRtzGY関連リンクは>>2-3
0821nobodyさん
2005/04/30(土) 10:33:39ID:???>>818
初心者のようなので念のため書いておくと、
通常、文字コード変換はデータの入口、CGIならばPOSTメソッドのparameterをdecode
した時点でする。生のままストレージに書き込むことはしない。
メールなんかは電子署名等の都合があるので変換せずに保存するが、CGIでそういうことはしない。
0824nobodyさん
2005/04/30(土) 19:39:11ID:???rubyでブロックとローカル変数が作れなくて困っています。
どこかにruby-lang.org以外で
変数のスコープとブロックについて書かれた資料は無いでしょうか?
0825nobodyさん
2005/04/30(土) 20:14:28ID:???0826nobodyさん
2005/04/30(土) 21:14:07ID:???Ruby初心者質問スレPart2
http://pc8.2ch.net/test/read.cgi/tech/1107799347/
> 最近perlからrubyに移ってきた者ですが、
変数の頭に$を付けたローカル変数を作ろうとしてたりして。
0827nobodyさん
2005/05/01(日) 02:40:06ID:???http://www.rubyist.net/~matz/20031121.html#p02
http://ruby-lang.org/ja/man/?cmd=view;name=FAQ%3A%3A%CA%D1%BF%F4%A1%A2%C4%EA%BF%F4%A1%A2%B0%FA%BF%F4
0828nobodyさん
2005/05/01(日) 09:44:24ID:???いや、たぶん820の言ってるのはそういう事ではなくて
yaml.rbがUTF-8限定だからといって、アプリケーション全体でUTF-8を扱うようにするのは
あまり良くない考え方ではないか、ということだと思う。
諸々の理由でSHIFT-JISを使わなくてはならないとき
(またはどう考えてもSHIFT-JISの方に軍配があがるとき)
どうするんだ、って話。
0829nobodyさん
2005/05/01(日) 10:52:21ID:???0830nobodyさん
2005/05/01(日) 12:00:02ID:???0831nobodyさん
2005/05/01(日) 23:39:35ID:???面倒な事をするくらいなら最初から決めておいたらどうでしょう、
最初から作るなら決めうち出来るのではないか、という意図でしたが、
話の前提から勘違いしてましたね、すみません。
0832nobodyさん
2005/05/04(水) 13:29:45ID:GxxcKWgPCGIでブラウザにHTMLデータを返すときにprintを使っているのですが、
そこで「表示」とか「申し」と入れると、
「侮ヲ」とか「垂オ」に文字化けしてブラウザに返しちゃうんです。
そこで、kconvライブラリを取り込んで
print "表示申し".tosjis
ってやってみたけどダメでした。=> 侮ヲ垂オ
これの解消方法ってないですか?
不思議とフォームに「表示申し」と書いて送信するとそれは正しく受け取ってくれて
ブラウザにもきちんと「表示申し」と出てきます。
ふつうのひらがなや簡単な漢字とかだとこうはならないんだけど・・・
バージョンは1.6.8、OSはWINXP、ブラウザはIE6です。
まだローカルなパソコンで試している段階で、サーバはApache2.0です。
0833nobodyさん
2005/05/04(水) 13:38:06ID:???CGI のソースにリテラル文字列で Shift_JIS で "表示" とか "申し" とか書いてるの?
であれば、スクリプトの冒頭で #! ruby -Ks とかする。
0834832
2005/05/04(水) 14:10:28ID:GxxcKWgPありがとうございます。
一行目に入れてみましたが、Internal Server Errorとなってしまいました。
そこで一行目は元のパスに戻して、今度は二行目に入れてやってみましたが、それでも症状は治りませんでした。
しくしく・・・
0835nobodyさん
2005/05/04(水) 15:00:06ID:???んー、もしかして伝わってなかった?
#!/usr/bin/ruby
だったら
#!/usr/bin/ruby -Ks
みたいに -Ks オプションを付ける、という意味なんだけど・・・
0836nobodyさん
2005/05/04(水) 15:03:10ID:RNwfWiBH/usr/local/bin/rubyとかフルパスじゃナイからってことじゃないよね。念のため
0837832
2005/05/04(水) 16:38:32ID:GxxcKWgPありがd!
#!/usr/bin/ruby -Ks
で直ったー!!うれしい。
#!ruby -Ks
#!/usr/local/bin/ruby
のことだと思ってました。ははは・・・。
0838nobodyさん
2005/05/05(木) 04:23:07ID:???この部分はUnixの文化ですからな。
http://www.faqs.org/faqs/unix-faq/faq/part4/section-7.html
http://www.nurs.or.jp/~asada/FAQ/UNIX/section4.7.html
0839nobodyさん
2005/05/05(木) 17:23:25ID:9E2Z1NIHENV["HTTP_ACCEPT"]が"*/*"だったときにはカウンターを回さない、ってやるのは乱暴かなあ。
0840nobodyさん
2005/05/05(木) 21:41:19ID:???過去一定時間(例えば1時間)分のアクセス者のIPアドレスを残しておいて、
そのログに含まれているものと同じIPアドレスからのアクセスはカウントしない、
とか。
0841839
2005/05/05(木) 22:28:15ID:???なるほど。ありがとう。
でもそうすると1時間以内だったら更新ボタン以外で再来訪してくれたのもノーカウントになっちゃうね・・・。
逆に一時間待てば更新ボタンでもカウントされてしまう・・・。
連打でカウントを不必要に回されるのだけは防げるからそれもよしか。
うまく「更新ボタンで来ました!」ってのを拾う方法ないかなあ。
0842nobodyさん
2005/05/05(木) 22:36:32ID:???0843nobodyさん
2005/05/05(木) 23:24:19ID:???0844nobodyさん
2005/05/07(土) 21:42:42ID:sZVuGBZqサーバに保存するときのファイル名の拡張子としてその文字列を使いたいのですが・・・。
0845nobodyさん
2005/05/07(土) 22:11:15ID:???0846844
2005/05/07(土) 23:56:55ID:sZVuGBZqありがとうございました。
0847nobodyさん
2005/05/08(日) 00:49:55ID:Dhx+t1nVwwwwwwwwwwwwwwwwwwwwwうぇwww
wっうぇ
うぇwwwwwwっ
wwwwwwっうぇ
www
うはっwwwうぇwwwうはっwwww
0848nobodyさん
2005/05/08(日) 22:27:52ID:sbu4QGJH0849nobodyさん
2005/05/08(日) 22:54:01ID:???0850nobodyさん
2005/05/09(月) 01:38:52ID:???仕事でやったことあるけど、流用はまずいので一から作ろうかな・・・
0851nobodyさん
2005/05/09(月) 02:08:17ID:???0853nobodyさん
2005/05/10(火) 08:10:14ID:???CGI関連はこの辺り。
CGIKit2.x を用いたアルバム CGI/Web アプリケーション
http://jp.rubyist.net/magazine/?0006-CGIKit-2.x
RubyOnRails を使ってみる 第 3 回 ActiveRecord
http://jp.rubyist.net/magazine/?0006-RubyOnRails
0854nobodyさん
2005/05/10(火) 22:51:13ID:???1 送信方法はPOST
2 ページの移動は常にSUBMITボタンで
3 送信先CGIのURLは常に自分自身
4 送られてきたデータにより読み込むテキストファイルを変える
5 読み込んだテキストをCGIスクリプトとしてevalで実行
クッキーもURLも使えない場合はこの方法しか残されていない希ガス。
0856854
2005/05/11(水) 00:49:43ID:???例えば書き込みを行う場合は、書き込みを行うスクリプトが保存してあるテキストファイルを読み込み、一行ずつevalするっていうイメージだったんですが・・。
ほかにもあるのねorz
逝ってきます。
0857nobodyさん
2005/05/11(水) 10:37:14ID:???0858nobodyさん
2005/05/11(水) 14:24:42ID:???あらかじめ同じファイルに含めてしまうとか、
requireとかloadとか。
あと、>>854の手法ってどの状態が「途中」であるかということに
触れられていないような気がしますが、
その辺も含めて書いてもらえると嬉しいです。
0859854
2005/05/11(水) 15:49:20ID:???そういやrequireがあったね。ありがとん。
0860nobodyさん
2005/05/11(水) 17:25:38ID:???0861nobodyさん
2005/05/11(水) 17:31:54ID:???途中に入られるのもそうだけど、
エージェントでこまかくわけてたからなー
0862nobodyさん
2005/05/11(水) 18:10:17ID:???0863854
2005/05/11(水) 21:38:25ID:???ドメインが違うページ間を行き来するセッションには使えないし、
クライアント様のパソコンを出来るだけ汚したくないってのもあるし、
クッキー非対応にブラウザを設定している人たちもいるだろうし、
・・・
ということです。
0864nobodyさん
2005/05/11(水) 22:41:20ID:???0865nobodyさん
2005/05/12(木) 19:47:15ID:???case〜when〜end使って似たようなことやってる。
ふつうにテキストファイルを置くとページは見れなくてもURLが合ってたらスクリプトが丸見えになるからね。
ブラウザが読めないように拡張子変えて偽装すればいいんだろうけど・・・
テキストファイルの拡張子を.JPGとかにして置いとくのは見え見えかなあ。
0866nobodyさん
2005/05/12(木) 21:32:27ID:???>URLが合ってたらスクリプトが丸見え
……それは流石にまずWebサーバの設定で弾いておくところじゃないか? (汗)
0867nobodyさん
2005/05/13(金) 02:46:10ID:???0869nobodyさん
2005/05/13(金) 10:07:26ID:???.htaccess 使ってもいいし、
直接呼ばれたかわかるようにしてエラーなりフォワードなり
送ってもいいし
0870nobodyさん
2005/05/13(金) 10:53:35ID:???レンタルサーバってなんか特別なんすか?
例えば~/public_html以下にしかファイルを置けないとか、
ホームディレクトリ以下がwebで公開されているとか。
そうではなくて、web公開用ディレクトリ(例えば~/public_htmlとか)と
その他のディレクトリ(例えば~/dataとか)を使えるのであれば、
CGIスクリプトは前者、そうでないスクリプトは後者に置く事で
うっかり見られてしまう自体を防げるのではないでしょうか。
0872848
2005/05/15(日) 18:09:04ID:???質問を変えます。
考えているのはこういう工程です。
(1)ユーザーは、あるメールアドレスに件名、本文、添付画像をケータイから送信します。
(2)管理人は随時、そのメールサーバにアクセスして、送られてきているデータを収集します。
(3)そのデータをひとつひとつ掲示板にアップロードしていきます。
(もちろん利用規約で、ケータイメールによる書き込みはタイムリーに行われないことはユーザに知らせておきます。)
この作業は当然ローカルパソコンで手作業すれば可能なんだけれど、(2)(3)のあたりはCGIプログラムで自動処理できないものかと。
出先からでもケータイでそのCGIにアクセスすれば溜まってる書き込みメールが自動でアップロードされるようにしたいのです。
0874nobodyさん
2005/05/16(月) 01:58:19ID:???0876nobodyさん
2005/05/16(月) 15:02:14ID:???とりあえず(2)でPOP3クライアントを作りたいなら
以下のページが参考になりそう。使用例として
メールの受信のサンプルがある。
Rubyリファレンスマニュアル - net/pop.rb
http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=net%2Fpop.rb;em=POP3
net/imap.rbの方はサンプル無しなので難しいかも。
Rubyリファレンスマニュアル - net/imap.rb
http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=net%2Fimap.rb;em=imap
(3)のアップロードはnet/httpあたりを使うのかな。よくしらない。
0877nobodyさん
2005/05/16(月) 16:32:29ID:???0879nobodyさん
2005/05/17(火) 22:42:44ID:???自分でGETとPOSTのデータを受け取る部分(ファイルアップロード含む)とクッキー操作の部分そしてセッション管理の部分まで書いたのが、1-2年前のことです。
しかしそれからCGIには全然手を出していませんでいた。
最近になって、ふとCGIを公開するHPでも作ろうかなと思い、自分で作ったcgi.rb相当のものを使おうかなと思っていたのですが、
よくよく考えると、CGIしか考慮していませんでした。
Rubyist Magazine に Nora というものの説明があって、CGI/mod_ruby/FastCGIに対応と書いてありました。
このライブラリでも使ってみようかなと思い、DLしようとしたのですが、作者のHPにもRAAにもないようです。
もう配布はしていないのでしょうか?
他にシンプルでCGI/mod_ruby/FastCGIに対応したものはないでしょうか?
0881879
2005/05/17(火) 22:59:58ID:???DLできました。
ありがとうございます。
0882nobodyさん
2005/05/19(木) 06:52:38ID:???私は今ログファイルのマネジメントができるクラスを開発中ですが、rubyのスキルがまだまだしょぼく、いいものができません。
インターフェイスとしては、最初に
log = Log.new(ファイル名)
としとけば、以後
log.put(行,列,値)
でファイル(テーブル構造)の任意の場所に値を書き込むことができ、書き込み時にはファイルのロック、アンロックも自動でやってくれるという至極モノグサなクラスなんですが・・・(他にもフィールド定義等多数メソッドあり)
もしこれに類似したクラスライブラリがすでにあるのであればその場所をご教示いただければ幸いです。
0883nobodyさん
2005/05/19(木) 10:00:28ID:???0884nobodyさん
2005/05/19(木) 12:01:53ID:???0885nobodyさん
2005/05/19(木) 12:10:49ID:???本来の意味のログファイルの管理クラスなら RAA に devel-logger があるぞ。
ttp://raa.ruby-lang.org/project/devel-logger/
0886nobodyさん
2005/05/19(木) 12:52:36ID:???0887nobodyさん
2005/05/19(木) 13:36:13ID:???0888882
2005/05/19(木) 16:09:49ID:???CGIで扱うデータファイルは全部ログと思っていました。
要はこういうクラスを使って掲示板、日記、プロフィール、お気に入りリンク集、アクセスカウンタ、更新履歴といったコンテンツをテーブル化して貯めておくテキストファイル(なんていえばいいんだろう)を編集できたら便利だろうなとおもったのです。
出直してきます・・・。
0889nobodyさん
2005/05/19(木) 20:08:13ID:???不定長なデータ全てをひとつのテキストファイル(なんていえばいいんだろう)に
突っ込んで管理してしまおうということなのかな。
そういうのは別々のファイルにバラして持っておいた方が良いと思うけどなあ。
漏れなら迷わず SQLite3 だが・・・ (しつこい)
0890nobodyさん
2005/05/19(木) 20:54:29ID:???ランダムアクセスでファイル操作するやつで、
レコード毎のカラム以外に、ヘッダ部分にも型を宣言して領域を確保できるようになっていて、
他に掲示板とかに便利だろうと双方向リスト型なんてのも作ったよ。
0891nobodyさん
2005/05/19(木) 22:11:14ID:???cgi.rb の ::CGI よりはかなり良いと思う。
標準添付だし。
http://www.ruby-lang.org/ja/man/?cmd=view;name=webrick%2Fcgi.rb
0892nobodyさん
2005/05/19(木) 22:41:00ID:???静的コンテンツをマネジメントするのによさげなフレームワークなんてありますかね?
0893nobodyさん
2005/05/19(木) 23:43:24ID:???0894888
2005/05/20(金) 19:11:14ID:???あ、それはさすがにないです。テーブルはコンテンツごとに作成し、1ファイル1テーブルです。
・・・たしかにこのクラスを継承すれば簡易DBのようなものが作れるかもしれません。
素直にDB勉強しようかな・・・
0896nobodyさん
2005/05/21(土) 00:22:25ID:???0898882
2005/05/22(日) 08:23:00ID:???DBを使わなくても気軽にテーブル(csvファイルなど)の任意の行や列やセルが読み書きできるクラスです。
table = Table.new(ファイル名,区切り符)
で、以後そのファイルは
table.〜
で、ロック/アンロック、レコードやフィールドの挿入/削除、といったあらゆる操作が可能となります。
・・・てか、誰でも思いつきそうなクラスなんだけど、ほんとに既存のものはないのかなー。
unixな人たちはosに標準でついてるDBMがあるから需要ないのかな?
まあ、これくらい自分で作ったとこでRubyの練習にはちょうどいいんだけど・・・。
0900882
2005/05/22(日) 09:27:32ID:???ありがとうございます!1.8系から標準添付なんですね。
しかし使わせてもらってるサーバーのRubyはまだ1.6系・・・orz
0901890
2005/05/22(日) 10:39:03ID:???詳細キボンといわれても、どういうこと書けばいいんだか;
どこにも公開はしていないですよ。
ただ、どこかにそれを使った掲示板はあます。
ちょっといろいろ難点があって再構築しようと思っているところです。
カラム名を指定するのを、文字列ではなく、シンボルにしようかなーとか。
0902nobodyさん
2005/05/22(日) 19:32:00ID:???(1) http://raa.ruby-lang.org/project/csv/ からアーカイブをダウンロードする。
(2) アーカイブに含まれるcsv.rbを取り出して、自分のスクリプトと同じディレクトリに置く。
(3) require 'csv'する。
ライブラリ自体は1.6.xでも使えるはずなので、
この手順で使えるようになると思う。
0903nobodyさん
2005/05/23(月) 08:02:36ID:???どんなメソッドがあって、それぞれどんな動きをするのか、とか、使用例とか。
ぜひ参考にしたいので。よろしければおながいします。
>>902
ありがとうございます。
まだ挙動の研究中ですがこのクラスがあればかなりラクになりそうです。
0904903
2005/05/23(月) 22:25:46ID:???>>902
うむむ・・・ひょっとしてcsv.rbってcsvをパースするだけ?
.add_rowで追加したいデータを渡してみたけどもとのファイルには変化なし・・・orz
最後にgenerateするまでファイルの更新はしないようです。
欲しかったのとはちょっと違いました。ごめんなさい・・・。
僕がほしいのは、掲示板の書き込み内容を
ary = ["2005/05/23","903",">>902<br>うむむ・・・ひょっとして(略)","sage"]
と配列にしておけば、
Table.insert_row(5,ary)
でログファイルの6行目にaryの各要素がカンマでつながった文字列が直接挿入されるといった感じです。
メソッドの実行と同時にファイルのロック、オープン、書き換え、クローズ、ロック解除を行うものです。
やっぱ自分で作るか・・・
0905nobodyさん
2005/05/24(火) 10:59:07ID:???0906nobodyさん
2005/05/24(火) 12:13:19ID:???csv.rbで出力は出来るけど、入力と出力の処理が分離しているので、
それでよかったら出来る。
RAAのgonzuiでcsv.rbに含まれるサンプルを参照できる。
http://raa.ruby-lang.org/gonzui/markup/csv/lib/csv.rb#l180
http://raa.ruby-lang.org/gonzui/markup/csv/lib/csv.rb#l513
CSV.open、CSV::Writerあたりを読むと良いだろう。
>メソッドの実行と同時にファイルのロック、オープン、書き換え、クローズ、ロック解除を行うものです。
それそのものはcsv.rbには含まれていないので、
その外回り(open close flockなど)のみを自分で作れば良いと思う。
0908nobodyさん
2005/05/25(水) 04:50:01ID:???バカ?
0909nobodyさん
2005/05/25(水) 07:50:13ID:???スクリプトと一緒に置いとけば使えるようものならいいんですが、サーバーにインストールしないといけないのはちょっと・・・自鯖じゃないもんで。
0911nobodyさん
2005/05/25(水) 11:15:13ID:???0912nobodyさん
2005/05/25(水) 11:31:29ID:???0913nobodyさん
2005/05/25(水) 12:43:16ID:???0914nobodyさん
2005/05/25(水) 12:44:48ID:???0916nobodyさん
2005/05/25(水) 15:58:52ID:???0917nobodyさん
2005/05/25(水) 17:52:24ID:???0918nobodyさん
2005/05/25(水) 18:03:59ID:???レス数が900を超えています。1000を超えると表示できなくなるよ。