Ruby 初心者スレッド Part 23at TECH
Ruby 初心者スレッド Part 23 - 暇つぶし2ch795:デフォルトの名無しさん
08/12/24 03:08:36
hpricotでdiv.entryで取得した記事数分ハッシュを作成するにはどうすればよいでしょうか?
Keyはentry_1->entry_nまででvalueは単語数とか他で計算した値を入れようと思うのですが.

796:デフォルトの名無しさん
08/12/24 03:27:22
mechanizeのデフォルトパーサがHpricotからNokogiriになったな。
いつのまに・・・

797:デフォルトの名無しさん
08/12/24 05:57:55
Railsを使ってプロジェクトを自動生成して
ruby script\generate controller main index
を実行したのみのプロジェクトでRubyのテストをしています.
webrickを起動して
URLリンク(localhost:3000)
のhtmlページは,問題なく表示するのですが
URLリンク(localhost:3000)
で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:デフォルトの名無しさん
08/12/24 07:21:44
>>795
search メソッドの返り値は Hpricot::Elements で、配列のような動作をするっていうか配列でできることは全部できる
これに詰まってる要素に当たるものは Hpricot::Elem だ
Hpricot::Elem にはタグに囲まれてる文字列を適当に返す inner_text メソッドや
HTMLで整形して返す inner_html メソッドがあるし、
Hpricot::Elem オブジェクトから search でさらに探すこともできる

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

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


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

801:デフォルトの名無しさん
08/12/24 09:45:55
回避できてもバグはバグなんじゃね?

802:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/12/24 11:18:49
>>802
Solarisスレで聞く

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

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

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

805:デフォルトの名無しさん
08/12/24 13:22:51
>>804
まずは1.8.7-p72のか、せめて1.8.6の一番新しいp287を試してみるべき。
URLリンク(www.garbagecollect.jp)
one-click installer使ってるんだろうけどこの際我慢。

806:802
08/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
08/12/24 14:14:57
>806

s/1.8.7-p27/1.8.7-p72/

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

809:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/12/24 17:50:42
hiddenを入れれば区別出来るんじゃね

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

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


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

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

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


816:デフォルトの名無しさん
08/12/25 06:44:34
>>815
スレリンク(tech板)l50

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

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

今ならYAML::Storeオススメ

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

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

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

820:デフォルトの名無しさん
08/12/25 15:36:57
某サイトのurlをopenした所、

uninitialized constant StanderdError (NameError)

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

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

822:デフォルトの名無しさん
08/12/25 15:45:45
がっちょわるー

class MyHogeError < StanderdError
end

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

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

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

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

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

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

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

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

828:797
08/12/25 16:26:27
>819

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

829:デフォルトの名無しさん
08/12/25 16:51:39
>>821
>>822

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

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

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

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

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

833:デフォルトの名無しさん
08/12/25 22:26:47
今すぐ買ってくるわ

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

835:デフォルトの名無しさん
08/12/25 22:46:05
隠しても仕方ないか
Rubyで作る奇妙なプログラミング言語 ~Esoteric Language~
URLリンク(www.amazon.co.jp)

> 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:デフォルトの名無しさん
08/12/25 23:09:53
なんかBFスレでは、へんな言語をネタにしたRuby入門本とか言われてたが。

...GRASS、無いのかw

837:デフォルトの名無しさん
08/12/25 23:15:39
>>836
GrassとGRASSは違う言語?


838:デフォルトの名無しさん
08/12/25 23:27:35
あ、Grassです。見えてなかったらしい。すまん。

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

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

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

842:797
08/12/26 05:53:14
とりあえず解決したので報告です.

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

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

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

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

845:デフォルトの名無しさん
08/12/26 23:20:20
鋸のXPathが期待した結果を出さないのだが,なぜ?
url = "URLリンク(bit.sikkou.jp)"
doc = Nokogiri::HTML(open(url))
puts doc.xpath('//b[text()="公告日"]')

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

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


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


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch