1 名前:730 [2008/09/15(月) 17:25:21 ] プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。 【Ruby1.9 は不安定な開発版であり初心者には全く向きません】 【最新安定版の Ruby1.8.7 の使用をお勧めします】 ※1.8.7 は1.8 と 1.9 の橋渡しをするためのリリースです。 1.9 の新機能の一部が利用可能なので初学者にお勧めです。 ※ただし十分安定しているとは言えないので プロダクション環境での利用にはお勧めしません。 関連スレやURLは>>2-8 あたりを見てください。Ruby on Railsの質問はRailsスレへ。 ■質問する人へ 質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。 ・モジュール名やエラーメッセージでググる ・マニュアルで引っかかったクラスの記述を探す www.ruby-lang.org/ja/man/ ・FAQを一応読む www.ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ 質問には以下を書くこと。へたくそな質問は再提出を要求される。 ・詳しい内容(「動きません」「うまくできません」では回答しようがない) ・エラーメッセージ(自力で訳さずなるべくそのままで) ・実行環境(OS名、Rubyのバージョン(ruby -v でわかる)) ・最終的にやりたいこと(もっとよい方法がある場合が多いので) 回答してくれた人には「ありがとう」のひとことをいってあげて。 ■回答する人へ 相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。 それができないならこないこと(だって初心者スレだもん)。 ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
610 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 21:32:47 ] ?付きメソッドを自分で定義すれば済むだけなので、漏れは必要ないかなあ。
611 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 21:48:34 ] >>610 メソッドごとに一つ一つ?付きを定義していくのって凄く面倒じゃね? 変更に弱くなるし
612 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 21:59:26 ] ?末尾のシンボルを渡されたら、メソッド名はそのままに 末尾削った変数にアクセスするっていうのも便利かもしらんね でも真偽値のアクセサが面倒になるほど多いっていうのも 設計見直せる可能性はない?
613 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 22:29:30 ] class Hoge def self.def_predicate(name) attr_accessor name private name private "#{name}=" define_method("#{name}?"){ __send__(name) } public "#{name}?" end def_predicate :hoge end こんなんとか。リフレクションを用いるほど多く使うんじゃなければ ちゃんと書いたほうがいいと思うけど
614 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 22:40:14 ] >>611 >>612 の言うように?付きメソッドをそんなに定義することあるかな?
615 名前:611 mailto:sage [2008/10/15(水) 22:43:31 ] >>612 >>614 4〜5つ程度の?付きメソッドでも、似たような定義を続けて書くことになるからかなり面倒だと俺は思う この辺は個人の意見もあるとは思うが
616 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 22:51:08 ] attr はあまり使わない メソッドはきちんと定義する
617 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 23:34:27 ] そもそも @hoge? ができないことに疑問を感じるんだが
618 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 23:45:48 ] だから ? つきはメソッドだっつーの述語だっつーの data= っていう変数が作れないのは不自然か? change! っていう変数が作れないのは不自然か?
619 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 23:56:18 ] @is_foo みたいな変数名をどれだけ見かけることか 変数名が述語になれないのはおかしい
620 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 00:08:25 ] @hoge? = 123 まず見た目がきもい そして三項演算子の文法と衝突しそう
621 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 00:08:33 ] 変数名が述語になるほうがおかしい飢餓す
622 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 00:12:41 ] @foop か @foo_p でいい
623 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 00:14:27 ] 「○○が二者択一のどちらかか、を格納する変数」というのはあまり Ruby っぽくない 二者択一の判断自体をメソッドで参照するのがフツーな気がする
624 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 00:32:23 ] >>620 そんなこと言ったらメソッド foo? がどんなオブジェクトも返すことのできる点もおかしくないかい?
625 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 00:36:58 ] 見た目がきもい、ってのはほんとに見たまんま、?で終わる識別子が左辺値にくるのが きもいってことだよ。 別に @hoge? = true ならいいってことじゃない
626 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 00:41:29 ] >>621 変数名とメソッド名の間で、言葉づかいの上でのセマンティックスが違っている「べき」なら、attr 系は廃止すべきってことになるな >>625 @hoge? = true なら悪くないと思うけど
627 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 00:46:06 ] やだよ。 メソッド名の慣習のせいで、「hogeっすか?」って訊いてるようなイメージがあるじゃん。>@hoge? で、「そうっすよ」とか「違いますよ」とか返事しようとしてるところに値突っ込むってのは変な感じだ。観念的な言い方でアレだが
628 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 00:50:34 ] 何も @hoge? があってもそう書かなきゃいけないわけじゃないから、? を使わない自由を奪っているわけではないでしょ。 それよりも、attr 系によって変数名とメソッド名を関連付ける機能が提供されているにもかかわらず、? 付のメソッドだけ特例でそれができないほうが一貫性に欠けて嫌だ。
629 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 00:54:28 ] >変数名とメソッド名を関連付ける機能 単なるメソッド。とあるリフレクションのラップなだけ。 >? 付のメソッドだけ特例でそれができない できないのはそこじゃなくて変数名に?を付けること。 でもってこっちは処理系本体の機能の話。 パーサとかに手を入れて?付き変数を許してまで@hoge?とか書きたいか?
630 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 00:58:26 ] そりゃ現状じゃ @hoge? が書けないようにパースしてるんだから、パーサを変えるしかないわな。 別に難しいことじゃない。 あと、attr_reader が処理系そのものが提供しているかどうかなんて関係ないじゃん。飽くまで意味論の話だし、built-inで入ってるんだから。
631 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 01:02:56 ] だって…再定義できるもの
632 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 01:06:57 ] >>627 メソッドvalueと変数@valueがあったとして、メソッドのほうは「valueは何か?」と問う意味なのに対して@valueはそのままの意味だよね? 同じようにhoge?がメッセージだと解釈されても、@hoge?までメッセージと解釈する必要はないのでは?
633 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 01:20:26 ] 変数名だからその通りなんだけど、あくまでイメージというか馴れや先入観の問題だよ。>@hoge?がメッセージっぽい また別の問題として、 変数名に?が付けられて、attr系もそんな名前を受け取るとすると hoge.foo? = true とか hoge.bar! = false とかが出て来る。後者なんて比較の否定と見間違う。 さらにいうと、?や!を許すとして、[]とか[]=とか@-は変数名に許す? 全部メソッド名としては有効なはずだよ。 attr_accessor :foo= -> foo.foo= = 123 こんなことになる
634 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 01:44:47 ] hoge.foo? = true はできてもいいと思う。 hoge.foo! = ってのはまあちょっとヘンだけど、attr系で ! つけたかったことないから、あってもなくてもいいや。 [] や = が「メソッドの一部である」というのは別の側面で筋を通すための論法であって必ずしも名前の一部ではないので (その証拠にメソッド「foo=」は、「foo.foo = 」のようにスペースを入れることができる)、 attr_accessor :foo= 等はなくてもよいかと。
635 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 01:55:24 ] >その証拠にメソッド「foo=」は、「foo.foo = 」のようにスペースを入れることができる いやいや、メソッド名はあくまで「foo=」だよ。__send__(:foo=, 123)とか出来る。 パーサが頑張って「foo.foo = value」を「foo.foo=(value)」と同じような扱いにしてくれているだけで。
636 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 06:05:11 ] 隔離スレでやれ
637 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 09:41:53 ] 本スレが隔離スレってのも難儀な話だよなあ
638 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 07:15:54 ] RDEのツールバーとコンソール窓の設定などが上手く動作してくれません ツールバーを移動して1段にまとめたりしても、RDEを最起動すると別の位置へ 勝手に移動した状態になってしまいます コンソール窓は、フォントの設定が初期値に戻ってしまうのと、 ctrl+alt+cで開閉したりができません コンソール窓のフォント設定だけは致命的なんで、そこだけでもなんとかできればと
639 名前:638 mailto:sage [2008/10/21(火) 07:27:47 ] 一応環境も ActiveScriptRuby 1.8.7(p72) Windows XP SP3 です
640 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 14:20:14 ] ツールバーの問題は俺の環境(XP)では何年も前からあるよ。
641 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 15:51:59 ] てかRDE薦めてるサイトでもあるのか? 俺なら間違ってもRDEなんて使わせないんだが
642 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 15:56:44 ] 統合環境使わせるなら EclipseかNetBeansあたりじゃね?
643 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 15:58:04 ] 本筋以外での障壁が大きいからねえ… 「我慢して使う」時点で何か間違っとる 素直にエディタとプロンプトをAlt+Tabで切り替えて使うほうがマシ
644 名前:638 mailto:sage [2008/10/21(火) 17:13:53 ] コンソール窓のフォント設定は自分のミスでした コンソール窓で右クリして「設定」からフォントを設定していたのですが、 直ぐ上に「フォント」というのがありました… 見逃してました >>640 どもです ツールバーはしょうがないみたいですね >>641-643 どもです winの人がrubyを始めようと思うと、RDEがまず最初に目に入るような気がします NetBeansはDLしてあったのですが、JAVAが云々…とまたやることが増えそうなので 後回しになってました とりあえず簡単なプログラムを書いて試したかったので、RDEをという感じで 日常はEmEditorのフリー版(かなり古い)を使っていたので、それでやればよかったのですが コマンド操作には不慣れなwin人なんで、お手軽(そう)なRDEから初めてみようと思い 初心者〜中級者?への道筋がすっぽり抜けてる感じがしていて先行き不安ですが 書いて直ぐ実行できるのはやっぱり楽しいし勉強になります
645 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 18:04:59 ] RDEはirbと似たような感じでSandBoxとしてしか使わないなぁ。 ファイルに保存はしなきゃならんけど、EmEditorも言語モード別のキー設定と、 外部プログラムのを実行して標準出力を下窓に出す機能が(少なくともVer6からには) 備わってるから、キー1発で実行はできるよ。
646 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 18:48:59 ] RDEはいろいろなところで紹介されてるから、知名度はかなり高いし 動作はけっこう軽くて多機能、日本語対応と利点は多い が、不安定さ(特に文字コード関連)とレジストリ使用がそれらの魅力を帳消しにしている
647 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 19:42:48 ] RDEを普段使ってない人がファーストインプレッションあるいは又聞きで薦めてんじゃないかと思ってる 普段から使っていれば、少なくとも初心者には勧めようとは思えないはずだ 単一言語用だからといってIDE作成が簡単になるわけではない 1種類の言語にしか対応しなくても、10種類の言語に対応してても、IDEとしての作り方は同じだと思う Rubyに特化すればIDEが俺でも作れそうとか最初に思った人は罪深いなと思ってみる
648 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 19:58:42 ] FreeRIDEが日本語や他の文字コードに対応してくれれば無敵なんだが
649 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 22:52:51 ] rubyの表記法の質問なのですが、 Test::Sample のように書かれていたら、TestとSampleはともにクラスでTestがSampleの親クラス という認識で合ってますか? ::という記号は定数やクラス変数なども表すとネットで見たのですが 区別は付くのでしょうか?
650 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 23:13:36 ] :: は 「の」 だ Test::Sample は Test 「の」 Sample だ それ以上の意味はないよ クラスかどうかは普通に識別子で判断する 先頭が大文字なら定数かクラス 先頭が小文字かアンダースコアならメソッド ただ、あからさまに面倒なのでメソッドを :: で繋ぐことはRubyでは意図的にしない (他の言語での書き方をしないと死ぬ人が稀に使う)
651 名前:649 mailto:sage [2008/10/22(水) 00:09:42 ] >>650 ありがとうございます。 そんな曖昧なものだったんですね。メソッドは#でしたっけ? この業界っていやに自己主張強い人が多いから統一できないのかな
652 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 07:50:20 ] RDEってRubyのサンプルプログラムとして付いているもんだと思ってた・・・
653 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 09:30:08 ] >>651 スクリプト上での表記とマニュアルでの表記は違う …違ってちゃいけないと思うんだが、まあ、 「○○クラスのインスタンスメソッド××を…」と書く代わりに「○○#××を…」と 「○○クラスのクラスメソッド××を…」と書く代わりに「○○.××を…」と 「○○クラスの定数××を…」と書く代わりに「○○::××を…」と書けたほうが 一度理解してしまえば便利ではある
654 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 18:04:18 ] >>653 > スクリプト上での表記とマニュアルでの表記は違う > > …違ってちゃいけないと思うんだが、まあ、 とはいえ、あるクラスのインスタンスメソッドというのは、直接コード上には 現れないから、そもそも同じ表記にはしようがない。 いちいち X.new.m とか書くのもめんどくさいだろ。
655 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 20:22:05 ] >>650 Test::Sample だったら普通はmoduleかclassがネストされてるやつじゃね?
656 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 09:59:06 ] >649 ::で示されるのは主に ・モジュール内クラス ・クラス内クラス ・モジュール内モジュール ・クラス内モジュール ・モジュールの持つ定数 ・クラスの持つ定数 などであって、クラス間の親子関係ではない。 どちらかと言えば所有、もしくは所属の関係。
657 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 17:43:37 ] Windowsなら、既に更新停止状態だがJmEditorでぜんぜんいける。 コマンドライン登録しとけば、キー一発で実行できるし、プロンプト 勝手に閉じてほしくないなら、ruby.exe実行してからpauseするバッチ ファイル登録すればいい。
658 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 18:56:51 ] まさかJmEditor使いが俺の他にもいたとは 動作軽いしUSBで運べるし、便利だよね
659 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 22:50:55 ] irb とかでいっつも忘れるんだけど、NKF.guess の返り値の数字と文字エンコード名の関係ってどっかに書いてないかな?
660 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 22:57:18 ] NKF.constants.map{|s|[NKF.const_get(s),s]} こんな感じで出せばいいんじゃないか?
661 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 23:42:46 ] refeで引いてみたら出てるかと思ったが $ refe NKF.guess require 'nkf' NKF.guess --- guess(str) 文字列 str の漢字コードを判別して返します。 返される値は、NKF モジュールのモジュール定数です(下記参照)。 ruby 1.8.2 より前は現在の NKF.guess1 と同じものです。 ruby 1.8.2 以降では NKF.guess2 と同じものです。 下記参照て言われても、下記がない・・・
662 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 08:30:26 ] .chmもちあるけば解決するお
663 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 09:07:06 ] >>659 あれは inspect で文字列が出るべきだと思う
664 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 09:07:51 ] >>662 書いてねえって
665 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 10:01:53 ] >>664 キーワード:NKF.guess(str) (nkf) でとんだページの下に定数が書いてあるけど・・・
666 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 11:02:43 ] > NKF.guess の返り値の数字と文字エンコード名の関係
667 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 23:52:29 ] ああ、そりゃソース嫁としかw
668 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 13:34:31 ] >>656 じゃあクラスの継承はどうやって表すの?
669 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 13:55:39 ] 「表しようがない」が正解かと 「XXXを継承したYYY」のように文章で書くしかないな
670 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 23:39:57 ] Win32OLEを使ってエクセルの自動処理をしようと思っているんですがうまくいきません。 require 'rubygems' require "win32/clipboard" require 'win32ole' excel = WIN32OLE.new('Excel.Application') excel.visible = false excel.displayAlerts = false excel.workbooks.open 'filename' => 'foo' workbook = excel.workbooks(1) sheet = workbook.sheets(1) sheet.select excel.Columns("B:B").select excel.selection.copy excel.quit ↓に続く
671 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 23:40:47 ] class Excel end excel = WIN32OLE.new('Excel.Application') WIN32OLE.const_load(excel, Excel) excel.visible = true excel.displayAlerts = true book = excel.workbooks.add('bar') sheet = book.worksheets(1) sheet.Columns("B:B").Insert Shiftt = Excel::XlToRight excel.Range("B1").ColumnWidth=11 #セル幅設定 ←幅や領域が違うっていうエラーが出るのでなんとなく excel.Columns("B:B").select excel.selection.parent.paste book.Save excel.quit エラーメッセージは以下 `method_missing': paste (WIN32OLERuntimeError) OLE error code:800A03EC in Microsoft Office Excel Worksheet クラスの Paste プロパティを取得できません。 HRESULT error code:0x80020009 例外が発生しました pastespecialなんてのも試してみてもダメ、エラーコードでググってもダメ、"ruby excel paste"などもググって見ましたがダメでした。 よろしくお願いします。
672 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 11:07:36 ] >>670-671 Excel.Application ペースト でググるんだ Win32OLEの情報を探すときはRubyに限定しないほうが良い 俺excel持ってないから動作検証できないけどごめんね
673 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 12:43:20 ] 関係ないけど gemで入れられる excel用のライブラリ見つけたぜ spreadsheet-0.6.1.5 Documentation spreadsheet.rubyforge.org/
674 名前:670-671 mailto:sage [2008/10/26(日) 17:37:00 ] >>672-673 ありがとうございます。解決しました。 原因は貼り付ける際に列で指定していたからダメだったようで、 貼り付ける先頭セルの値をRangeで受け渡したらうまく行きました。 また上のプログラムだとちゃんと保存できないのも注意です。 開き方の問題なのか読み取り専用になっているようです。 名前を付けて保存するようにしたらちゃんと保存されました。
675 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 19:29:35 ] 掲示板スクリプトを作ってるんだけど、動かない。 どこがおかしいのかな。 使っているサーバー @pages (www4サーバー) 一応誘導を受けて来たので誘導元 □規制解除要望□ dion.ne.jp専用 Part727 ex24.2ch.net/test/read.cgi/accuse/1224841217/ スクリプトはここからダウンロードして www4.atpages.jp/mh35jp/bbsmake.html
676 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 19:33:52 ] excelのvlookupのようなものをrubyで書きたいのですが 遅いので速くしたいです。(元々excelのものが遅いのが発端です。) アドバイスをいただけないでしょうか。 よろしくお願いします。 ################### 想定する入力データ 1,0.25,2.25 2,0.75,1.76 3,1.24,1.24 4,1.76,0.75 5,2.25,0.25
677 名前:676 mailto:sage [2008/10/26(日) 19:34:59 ] #676の続きです def Vlookup(vs,v) vx=vs.to_f if (vx<v[0][0]) then return -99.9 break elsif (vx>v[v.size-1][0]) then return 99.9 break end for i in 0..(v.size-1) vpre=v[i][0] vpst=v[i+1][0] if (vx>vpre)&&(vx<=vpst) then if (vpre-vx).abs<=(vpst-vx).abs then num=i elsif (vpre-vx).abs>(vpst-vx).abs then num=i+1 end break end end return v[num][1] end
678 名前:676 mailto:sage [2008/10/26(日) 19:35:43 ] #677の続きです。 DAT=[[0.5,5.0,50.0],[1.0,10.0,100.0],[1.5,15.0,150.0],[2.0,20.0,200.0]] lines=Array.new open(ARGV[0],"r") do |f| while line = f.gets line.chomp! lines=line.split(/,/) lines[1]=Vlookup(lines[1],DAT) lines[2]=Vlookup(lines[2],DAT) print lines.join(","),"\n" end end
679 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 19:44:37 ] >>675 いきなり自作CGIをレンタルサーバーで動かすとか正気の沙汰ではないぞ httpdのエラーログをみよう。 いやその前に、まずは、WindowsならばXAMPPでも入れてローカル環境で試そう、な
680 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 19:54:27 ] >>679 一応ローカルで実験はした。 方法 1.irbを起動する 2.環境変数を設定 3.systemコマンドで実行 結果 とりあえず動いた だからアップロードしたわけだが。
681 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 19:58:41 ] 結論: ・ 馬鹿にCGIを渡すな
682 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 20:02:38 ] >>681 一応Apacheをインストール中 ところで、WindowsのApacheでCGIを動かすとき#!の行はどうすればいい?
683 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 20:10:51 ] 家の環境では、ruby.exeをapacheと同じドライブの例えばc:\usr\local\bin\ に放り込んでおけば動いた
684 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 20:12:44 ] パスは通しておいてね
685 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 20:12:47 ] >>682 パス通して#!rubyでいいんじゃね
686 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 20:13:15 ] > パスは通しておいてね Ruby本体をインスコしたディレクトリにパスは通しておいてね
687 名前:675 mailto:sage [2008/10/26(日) 20:20:11 ] 実験は成功した。普通に動いた。 今度は書き込みを実行したとき何も出力されないバグが出てきたが
688 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 20:34:55 ] cgi-exception入れとけ ttp://cgi-exception.rubyforge.org/
689 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 21:02:28 ] >>688 ローカルでは動く。リモートでは動かない cgi-exceptionをrequireしても(もちろんそのファイルごとアップロード済み) まったくダメ。
690 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 21:07:27 ] この分だと向こうで拡張ライブラリの一部が欠損しているというオチの可能性が 高そう。標準添付のライブラリ(cgi,nkf)しか使ってないのに…
691 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 21:24:01 ] CGI.unescape(cgi.params['うんこ']) を CGI.unescape(cgi.params['うんこ'][0]) にするとかさ、 NKF,nkf(略) を NKF.nkf(略) にするとかさ、 変数名やGET/POSTパラメタの名前に誤りがないかよく見るとかさ。
692 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 21:26:19 ] 環境を疑うよりは、まず自分のスクリプトを徹底的に疑うべき CGI-Exceptionでエラーが出ないなら次はprintfデバッグだ スクリプト中の適当な位置で、テキストファイルにログを書き出していけば たいていエラー箇所を特定できる (スクリプトが全く実行されない場合は、syntax errorかrubyパス絡みの可能性が高い)
693 名前:692 mailto:sage [2008/10/26(日) 21:37:21 ] あ、重要なこと書き忘れてた 初心者は(初心者じゃなくても一緒だけど)まず最小限のCGIスクリプトから書き始めろ 小さなスクリプトが動いてから、徐々に機能追加していかないと ただでさえ特定しづらいCGIのエラーが、余計に特定しづらくなる 少なくとも、そこそこの長さがあって環境変数が関わるような掲示板スクリプトを 一気に書き上げるべきではない
694 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 21:55:34 ] >>691 それにはすでに気づいて直した。直したが治らない。 >>692 syntax errorがらみはありえない(-cオプションで検査済み) パスもチェック済み(/usr/local/bin/ruby) >>693 一応ローカルで動作確認済みなので
695 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 21:59:42 ] これはRubyの問題ではない(まだ) >>694 だからその方法が間違ってると指摘されてるだろう CGIは「ブラウザでInternalServerErrorが出なくなるまで書き直す」という手法で開発してはいけない エラーメッセージを確認しない開発手法は糞だ
696 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:02:14 ] > 一応ローカルで動作確認済みなので 最小限のCGIスクリプトをサーバー上で動かさないとダメ 「環境変数自分で入れて、systemで実行して動いたから」というのではあまり意味がない
697 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:03:11 ] 結論: ・ 馬鹿にCGIを渡すな
698 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:04:18 ] >>695 とりあえずちょいと方法が思い浮かんだので実験してみる 1.まずは単なるテストスクリプトが動くか確かめる それすら動かないようならとりあえずこの環境での動作はあきらめたほうがよい 2.次にちょっとした工夫のなされたテストスクリプトを使って実験を行う 3.最後にその結果を見て検証する
699 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:04:55 ] RubyでWin32弄くる場合に必要な知識はRubyそのものではないのと同様に RubyでCGIやる場合に必要な知識はRubyそのものではないのだな ライブラリで吸収隠蔽すべきかどうかというのは悩ましいとこだと思う
700 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:05:14 ] >>696 Apacheでも動作確認済み 1時間以上前に実験した。
701 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:06:11 ] bbs.cgi:57: cgi.params['content']をCGI.unescapeに渡している Arrayが渡ったりしてNoMethodError -> あぼーん bbs:cgi:58: NKF,nkf('-s',content) カンマとドットのtypo とりあえず2つみっけ 動作確認済みとは笑わせるな それともHPのzipからまた弄ってるのか?
702 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:09:26 ] >>700 どう動作確認したのかkwsk 俺の環境でApache立ち上げて試してみたが、普通にアクセスしただけでエラーが出る 具体的には>>701
703 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:09:46 ] #!/usr/local/bin/ruby -Ks print "Content-type: text/html\n\n" print "<html><head><title>テスト</title></head><body><p>テスト</p></body></html>" このスクリプトすら動作してないのでもはやお手上げ
704 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:10:02 ] >>699 だねえ >>700 小出しにするな 自分で話をまとめられないなら諦めれ
705 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:11:17 ] > 小出しにするな > 自分で話をまとめられないなら諦めれ に一票 そして離脱
706 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:17:59 ] >最小限のCGIスクリプトをサーバー上で動かさないとダメ に対して >Apacheでも動作確認済み >1時間以上前に実験した。 って…明らかに話噛み合ってないな
707 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:19:34 ] >>703 自分でApache立ち上げて試すときは、そのパスじゃまず起動しないぞ #!ruby -Ks にして試してみ。それでも駄目ならお手上げ
708 名前:675 mailto:sage [2008/10/26(日) 22:21:49 ] >>706 まったくかみ合わない上に、どうやらこちらの問題ではなさそうだと 判明したのでたぶんこれ以上話し合っても結論が出る可能性は0(正確には) ただ、根本的バグが見つかったのは皆さんのおかげです。 皆さん、ご協力どうもありがとうございました。
709 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:24:45 ] >>707 もちろんローカルでやるときはそのためのパスにするわけですけどね。
710 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:31:12 ] >>707 Rubyの絶対パスを指定して動いてるので、いえるのは もはやここでは対処しようのない問題だということです。 とりあえずテストスクリプトすら動かないということは 他のところに持っていったのでこれ以上の深入りは 避けたいと思います。