[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 05/16 09:04 / Filesize : 244 KB / Number-of Response : 847
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Ruby 初心者スレッド Part 23



1 名前:デフォルトの名無しさん mailto:sage [2008/11/20(木) 04:30: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を読め」でいいので、叩かない&怖がらせない。
 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。

793 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 00:49:24 ]
>>791
真意は知らないけど個人的感想としては、mechanizeのライブラリ構造も
単純ではないしRubyの勉強方法として良い手だと思った。
「理解した(自称)」以上に理解が進んでないと説明することなんて
できないんだよなぁ・・・。説明してる内に薄っぺらさが露呈する。
告白デバッグが気付かせてくれるのはまさにそれ。


794 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 00:58:31 ]
以上ちらうら

795 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 03:08:36 ]
hpricotでdiv.entryで取得した記事数分ハッシュを作成するにはどうすればよいでしょうか?
Keyはentry_1->entry_nまででvalueは単語数とか他で計算した値を入れようと思うのですが.

796 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 03:27:22 ]
mechanizeのデフォルトパーサがHpricotからNokogiriになったな。
いつのまに・・・

797 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 05:57:55 ]
Railsを使ってプロジェクトを自動生成して
ruby script\generate controller main index
を実行したのみのプロジェクトでRubyのテストをしています.
webrickを起動して
localhost:3000/
のhtmlページは,問題なく表示するのですが
localhost:3000/main
でindexページを見ようとすると
1度目は正常に表示されますが,
更新ボタン(もしくは,アドレスバーの移動ボタン)を押すとWebrickが次のようなエラーを出して終了していしまいます.

127.0.0.1 - - [24/Dec/2008:05:44:28 東京 (標準時)] "GET /main HTTP/1.1" 200 283
- -> /main
127.0.0.1 - - [24/Dec/2008:05:44:33 東京 (標準時)] "GET /main HTTP/1.1" 200 283
- -> /main
C:/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/connection_adapters/mysql_adapter.rb:196: [BUG] Segmentation fault
ruby 1.8.6 (2007-09-24) [i386-mswin32]

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

ひとつ目の-->/mainが移動時,ふたつ目が更新時です
どのように対応すればいいでしょうか.

798 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 07:21:44 ]
>>795
search メソッドの返り値は Hpricot::Elements で、配列のような動作をするっていうか配列でできることは全部できる
これに詰まってる要素に当たるものは Hpricot::Elem だ
Hpricot::Elem にはタグに囲まれてる文字列を適当に返す inner_text メソッドや
HTMLで整形して返す inner_html メソッドがあるし、
Hpricot::Elem オブジェクトから search でさらに探すこともできる

それ以上のもんではないので、普通にどうにかして作れ

799 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 08:43:05 ]
>>797
[BUG]と出た場合、Rubyのスクリプトレベルの誤りではないので、
開発サイドに再現コードを教えるくらいしかできることはない。


800 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 08:49:16 ]
BUGと出ても、自分がわけのわからんオブジェクトを引数でメソッドに渡してるとか
回避できるものもあるけど

801 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 09:45:55 ]
回避できてもバグはバグなんじゃね?



802 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 10:59:53 ]
すいません、ググっても解決できなくてハマっているので教えてください。

ruby1.8にて、ptyとexpectモジュールで、自動sshログインをしようとしているのですが。
cygwin上では、問題なく動かせるものの。
solaris(free10)では、spawn('ssh ***.***.**')の所で

> open: pty slave: No such file or directory

とでてしまいます。
このspawnの内部をsshのフルパス指定にしたり、lsなど他のコマンドに代えても同じでした。
どうもptyモジュールが上手く動かせてないと考えているのですが。。。
特にptyにはパラメータはなさそうです。

ptyがやろうとしてる仮想tty?という処理がなんなのかが理解できてない....

すみません、どなたか動かすヒントだけでも教えてください。

803 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 11:18:49 ]
>>802
Solarisスレで聞く

804 名前:797 mailto:sage [2008/12/24(水) 13:03:37 ]
>>799-801
こちらの環境が悪いんじゃなくて
Ruby(もしくはRails)開発側が悪いってことでしょうか?

手書きでは,まだコードを一行も書いていないので
そんなことないと思いたいのですが...

Rubyのダウングレードとかで対応できないか今夜にでもやってみます...

805 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 13:22:51 ]
>>804
まずは1.8.7-p72のか、せめて1.8.6の一番新しいp287を試してみるべき。
www.garbagecollect.jp/ruby/mswin32/ja/download/release.html
one-click installer使ってるんだろうけどこの際我慢。

806 名前:802 mailto:sage [2008/12/24(水) 14:13:10 ]
1.8.7-p27 のソースからのビルドでしたので。
なにかヒントがないかとざっと眺めると、 ./ext/pty を発見。

ダメ元でpty.c をのぞいて、問題点を探してみると、
どうも"TIOCSCTTY "の定義が無い事がまずいんじゃないかと推測。

この情報を元にググってみると
去年の8月、ruby-lang に "Bug in ruby extension" というスレを発見
> I noticed that Solaris 10 does not support TIOCSCTTY so in function
> establishShell() the child process closes the slave device and reopens it to ...

どうやらSolaris 10 において、ptyの問題が指摘されている模様。
TIOCSCTTY がキーワードみたいだが。 私では何がまずいか理解できない(汗)

このスレで問題対応パッチが登場し、最後にmatzさんが"そのパッチをコミットしてくれー"と書いている。

これが今回の私の問題点と同じであるなら、最新版なら動くはずじゃん。と思い・・・.
あ、でも、1.8.7-p27 が 1.8系の最新版ですよねぇ。
うぐぐ、この問題と関係がないのかなあ。。。。(´・ω・`)ショボーン


>803

レスサンクス。
推測通りsolarisの環境がらみの問題なら、海外で聞いた方がよさそうですね。
英語で聞くのは閾が高いなあ...(´・ω・`)

807 名前:802 mailto:sage [2008/12/24(水) 14:14:57 ]
>806

s/1.8.7-p27/1.8.7-p72/

808 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 15:34:50 ]
>>786
Passenger入れろw
っていうほどのメモリもないみたいだがwww

809 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 16:20:13 ]
以下のようなフォームデータを cgi クラスで受け渡したいと思っています。
<form action="" method="post">
<input type="text" name="server" value="#{server}" />
<input type="text" name="name" value="#{name}" />
<input type="submit" value="更新" />
</form>
それも同じ形式のフォームを何個か繰り返しおいて、しかもその個数も可変にしたいと思っています。
さらにそのデータは pstore に保存したいと思っています。

古い CGI での方法ならば変数名 server などに番号をつけて server1, server2 などという変数名として
ループで 1..max をまわして処理するというのが思いつくのですが、Ruby 的にエレガントな方法はあるのでしょうか?
配列やハッシュなどを使ってスマートに書く方法があったら教えていただけませんでしょうか。

810 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 17:50:42 ]
hiddenを入れれば区別出来るんじゃね

811 名前:797 mailto:sage [2008/12/25(木) 00:36:49 ]
>805
どちらをインストールしてみても結果は一緒でした...
これってRuby開発者側に伝えた方がいいのでしょうか
うちの環境のみの再現だと思うのですが...



812 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 01:18:37 ]
rakeで、src/**/*.txt から dst/**/*.html に変換するような file タスクを書きたいんですけど、どうかけばいいですか。


813 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 05:11:00 ]
a hrefの値の中にABCっていう文字列があるリンクの中身つまりinner_textを取得するにはどうすればいいでしょうか?
hpricotやNokogiriで指定しようにも複数のページでXPATHのaの順番が違っていて取得できません。

814 名前:813 mailto:sage [2008/12/25(木) 05:36:00 ]
すいません、事故解決です。
doc/"a[text()*='ABC']"でできますね。
Hpricotとかをtagやセレクタでぐるぐる回すものだと勘違いしてました。
お騒がせしました。

815 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 06:04:46 ]
>>811
自分のコードかデータにバグを引き起こす原因があるとは思わないの?


816 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 06:44:34 ]
>>815
pc11.2ch.net/test/read.cgi/tech/1227123021/l50

817 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 06:51:44 ]
>>797
とりあえず該当の行を見て、まずどこて落ちたのかを調べるべき
それでも本体のバグっぽかったら諦めて報告

>>809
本題とは関係ないけど、CGIアプリケーションでPStore使うのはオススメしない
rubyのバージョンが古くなるとデータ読めないことがあるから
自分しか使わないスクリプトなら問題はないけど

今ならYAML::Storeオススメ

818 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 13:26:33 ]
>>810
hiddenを入れて対処できました。ありがとうございました。

>>817
そうなんですね。YAML::Store に書き換えておきました。ありがとうございました。

819 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 13:59:37 ]
>>815
>>797見てそう思う方がおかしくないか?w
でもmysql環境を見直してみる価値はありそう。

820 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 15:36:57 ]
某サイトのurlをopenした所、

uninitialized constant StanderdError (NameError)

こんなメッセージが出てプログラムが途中で止まることがあるですけど、これって何が原因なんでしょうか。

821 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 15:38:47 ]
>>820
>StanderdError
StandardErrorと書いたつもりのどっかでスペルミスしてる。



822 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 15:45:45 ]
がっちょわるー

class MyHogeError < StanderdError
end

とか書いてあるんだな
がっちょわるー

>>820
使ってる外部ライブラリの中から「StanderdError」という文字列を探して「StandardError」に直接書き換えとく

823 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 15:51:11 ]
> rubyのバージョンが古くなるとデータ読めないことがあるから
これをあまり心配してない俺
その時になってから過去のバージョンの pstore で読んで、新しいバージョンの pstore で書き出せばよくね?
PStore を YAML で置き換えて常用するなんてブルジョワジョワジョワに過ぎるだろ

824 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 15:57:22 ]
どんなデータをどんだけ保存したいかによるね
ファイルが数KB程度で収まるなら読みやすいYAMLのほうがよかろう

なんかよくわからん大量のデータの数百KBを読み書きしまーすというのならさすがにちょっと
うっかり画像を保存したことがあるが遅くて死んだ

825 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 16:06:11 ]
バイナリだとクラッシュしたときの復旧がしんどいから
ちょっとしたデータのシリアライズにはyaml/storeがお気に入り。

826 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 16:09:07 ]
とりあえず一般ユーザーはこれ使っとけ、と言えるほどのものがRubyにはまだないんだ
用途に応じて使って適宜バックアップだの負荷測定だのしなきゃならん

827 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 16:15:51 ]
>>826
ガイドみたいなのがあるといいよね
ってるびまにあるのか

828 名前:797 mailto:sage [2008/12/25(木) 16:26:27 ]
>819

mysql関係ですか,
とりあえず今夜は,sqliteで同じように実装してから
再現確認してみます.

829 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 16:51:39 ]
>>821
>>822

begin
open("*****")
rescue Timeout::Error
rescue StanderdError <<<<<某プログからのコピペまんま
rescue EOFErro
rescue Exception
rescue NameError
end

こんな感じで例外関係の対処法ググっては追加していた中で某ブログからコピペしたものが、
スペルミスしていたとは..。
即回答ありがとうございました。実は昨日からハマってました。

830 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 17:05:59 ]
>>829
コピペうんぬんより、エラーメッセージを*よく*見て原因を考えるクセをつけようぜ!

831 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 22:03:26 ]
Ruby学習者の「2冊目の本」、買ったやついる?どう?



832 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 22:24:03 ]
エロティックランゲージだかなんだか副題がついてたやつか

833 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 22:26:47 ]
今すぐ買ってくるわ

834 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 22:39:08 ]
あれはRuby学習者というか、Rubyを使いたい人向けの本だろ
位置的に初学者本の次くらいなんじゃねーかとは言われてないわけでもないが

835 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 22:46:05 ]
隠しても仕方ないか
Rubyで作る奇妙なプログラミング言語 〜Esoteric Language〜
ttp://www.amazon.co.jp/dp/4839927847/

> 1-2 サンプルプログラムに特化した言語、HQ9+
>  HQ9+とは
>  HQ9+インタプリタを作ってみよう
> 1-3 8つの命令ですべてを記述する言語、Brainf*ck
> 1-4 決して印刷できない言語、Whitespace
> 2 Esoteric Languageを作る
> Esoteric Languageの設計と実装
> Starry言語の設計
> 付録 Esoteric Language傑作選
> Befunge、 Wierd、Shakespeare、Chef、Unlambda、Grass
> False、NULL、AAAAAAAAAAAAAA!!!!、INTERCAL、Malbolge、KEMURI、Taxi

836 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 23:09:53 ]
なんかBFスレでは、へんな言語をネタにしたRuby入門本とか言われてたが。

...GRASS、無いのかw

837 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 23:15:39 ]
>>836
GrassとGRASSは違う言語?


838 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 23:27:35 ]
あ、Grassです。見えてなかったらしい。すまん。

839 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 23:34:55 ]
新しい「プログラミング言語 Ruby」が来年の1月に出るのか。
1.9.1のリリースが迫って書籍もまた出てきそうだな。

840 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 01:05:48 ]
RubyでSQLを用いるときってどういう時ですか?
解析させるデータ数が多いとか相互参照が多いときとかですかね?

841 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 01:11:04 ]
リレーショナルデータベースを使うとき...というか、
どういう時にリレーショナルデータベースを使うか、という質問?



842 名前:797 mailto:sage [2008/12/26(金) 05:53:14 ]
とりあえず解決したので報告です.

原因はいまだにわかりませんが
Railsのヴァージョンを
2.2.2 -> 2.1.2
へとダウングレードすることで正常動作するようになりました.

mysql postgres sqlite3
と三つ試しても同じ結果だったので,
諦めかけてましたが,
友人が作ったv2.1.2のプロジェクトを実行したとき
偶然うまくいったのがきっかけでした

843 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 11:31:16 ]
>>840
Rubyの「メモリ内でのハッシュ構造+ディスク上でのPStoreのようなもの」ではどうにもならない場合
具体的には>>841

844 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 12:35:59 ]
SQLの方が良い場合も歩けど
オブジェクトのままシリアライズした方が良い場合も結構ある
後者だと単純にSQLに置き換えるって訳には

845 名前:デフォルトの名無しさん [2008/12/26(金) 23:20:20 ]
鋸のXPathが期待した結果を出さないのだが,なぜ?
url = "bit.sikkou.jp/servlet/xxw.XxWServlet?O_sale_unit_id=00000006772&O_court_cd=31131&O_thing_cls=2&O_tender_flg=1&PAGEID=XxW04_jp_0130&ACTION=anchor"
doc = Nokogiri::HTML(open(url))
puts doc.xpath('//b[text()="公告日"]')

「<b>公告日</b>」になるはずなのだが,

結果は空白(要するに検索できてない)
エンコードの問題でしょうか?
ちなみにスクリプト自体はUTF-8です。


846 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 23:25:17 ]
>>845
あ〜、これは誰かがどっかで説明しないといけないんだけど、Nokogiri.new は実は引数を3つとるんだよ
第3引数は文字列の文字エンコードを書く
doc = Nokogiri::HTML(open(url), nil, 'SHIFT_JIS')
って書いてみ






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<244KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef