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


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

Ruby 初心者スレッド Part 22



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を読め」でいいので、叩かない&怖がらせない。
 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。

877 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 23:22:19 ]
>>859
>NFS上でのロックは不可能。
ほう、そうなのか。知らなかった。さんくす。

>fcntlを使えばNFSでロックすることは可能になるがIO.ioctl関数という
>可搬性が低いメソッドを用いなければならず(まずWindowsなら実装されていないと
>門前払い)かなり面倒。
Windows上でNFSを使うことはないだろうから、ioctlはUNIX限定でいいんじゃね?

>おまけにたいていNFS上でのロックはセキュリティホールに
>なるので使えないのが普通。
これよくわかんないんだけど、理由は?参考になるURLプリーズ。

>>860
>レンタルサーバだと、flockが明示的に禁止されているサーバがある。パンドラとか
これも理由がわからん。レンタルサーバでNFS使ってるわけじゃないだろうし。なんで?

878 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 23:31:11 ]
>>877
ttps://menu.pandora.nu/public/flock.php
パンドラ側の説明みつけた

879 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 00:06:10 ]
超絶初心者な質問で申し訳ないんですけど、RubyScript2Exeでexeファイル作りたいんですけど上手くいきません。
使い方は、RubyScript2Exe.rbとexeにしたいファイルを同じフォルダに入れて、
コマンドプロンプトで、「ruby [RubyScript2Exeのパス] [exeにしたいファイル]」
で合っていますか?

880 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 07:32:00 ]
>>878
サンクス。あきらかにNFS使ってるね。
そんなサーバがあることに驚いたけど。

881 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 07:50:04 ]
つまりflock前提として、最適なロック方法は
「まずIO.ioctlでロックを試みる、エラーが出ればrescueしてflockする」ということか!

・・・面倒だ
やっぱり、完全に可搬性のあるファイルシステムロック用のライブラリが欲しいな

882 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 08:19:04 ]
「完全に」とか簡単に言っちゃう人って頭悪そう。

883 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 08:36:33 ]
不完全or不安定なライブラリがほしいって言うのもなんだと思うが

884 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 08:49:34 ]
欲しい欲しい、して欲しい。

885 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 09:14:19 ]
RAAやRubyForgeをざっと探してみたけど、ファイルロック用のライブラリらしきものが見当たらない
実はみんな、あまり必要としていないのか?

MLでこんな古い話は見つけたが、ソースコードはもう公開されてないっぽい
(時間ないから詳しく探してないけど)
ttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/11326



886 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 09:50:16 ]
本来、ファイルロックみたいにべったり環境依存なものに、完全な可搬性を求める発想が普通は余りないんだよね。
とはいうものの「環境依存だから諦めろ」ってのも古い考えで、こういう操作こそ処理系で環境差異を吸収しろ、っていう意見も、確かに一つの見識だと思う。
というわけで、完全な可搬性を持ったファイルロックの実装をコントリビュートしてくれ。

887 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 09:54:31 ]
あんまり気にしたこと無かったけど、makeするあたりで
良きに計らってくれるとよさそうな感じだね

888 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 15:07:35 ]
flockが使えるかどうかがファイルシステムに依存する以上、
コンパイル時に判定するのは無意味じゃないか?


889 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 17:32:32 ]
>>886
SQLが使えるなら簡単な表を作って、そこに1つだけレコードを追加して、
あとはSELECT FOR UPDATEかSELECT LOCK IN SHARE MODEで終了。
幸いSQL用のライブラリは普通に配布されてる。
SQLが使えない場合はやり方を工夫するしかないわけなんだが。
とりあえずパンドラさんのPerlライブラリを解析するしかなさそうだけど。
>>881
むしろ順番は逆のほうがいい。ioctl関数はどちらかといえば汎用関数。
ioctlが使えないのはほぼ例外なくWindowsで作られてるサーバー。

890 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 17:34:51 ]
RuBBSになんかあったな、ロック用のモジュール。
これの可搬性はどうなんだろう。

ttp://www.google.com/codesearch?hl=ja&q=lang:ruby+lock.rb+RuBBS+show:GN3bH3qHRek:P3zWR8HHuh8:MtDFtjKjkEI&sa=N&cd=2&ct=rc&cs_p=www.spc.gr.jp/software/archive/rubbs-1.0.7.tar.gz&cs_f=rubbs-1.0.7/lock.rb

891 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 17:53:13 ]
>>890
この関数の流れは…
1.ロックファイルを固有ファイルに名前を変えようとする。成功したら3へ
2.失敗したらタイムアウトより古いロックファイルがあればロックを取得しようとする。
成功したら3へ
3.1秒待って1へ戻る。ただしtry回試して失敗したら打ち切り
4.ロックを取得できていなければLockError例外を発生させる
5.ブロックをともなって呼び出されていた場合そのブロックを実行する。
そしてロックを解放する

ロックの解除は普通に元のファイル名に変更するだけ。

汎用性はかなり高いと思われる。レースコンディションを検討しても
まずないだろうと考えられる。ファイルのリネームができないサーバーは
まずないだろうからその面でも問題はない。

892 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 18:01:12 ]
ただし、このプログラムを使う場合、GPL2が適用されるので
それを使ったソースの配布もGPL2を用いなければならず、
そこが唯一の問題だったりする。逆に言えば、GPL2で
配布する予定のプログラムならぜんぜん問題はないといってよい。

893 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 19:05:10 ]
>>892
自分で書き直せばいいんじゃね?


894 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 22:36:42 ]
アトミックな処理(シンボリックリンクの作成とか)を利用したロック方法は
それなりにノウハウが枯れきっている話題だし、自分で実装しちゃえばいい。


895 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 07:21:48 ]
試しにファイルシステムロック用のライブラリを書いてみた(不完全)
mkdir方式で共有ロック・排他ロックの区別あり
ttp://eload.run.buttobi.net/cgi-bin/img/e_260.zip

ロック検出→ロックディレクトリ作成の間に
明らかなレースコンディションがあるんだけど、解決の方法が思いつかない・・・
何かいい解決策はないだろうか



896 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 12:34:09 ]
すでに存在するディレクトリを指定したときにエラー返らないんだっけ?

897 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 13:20:39 ]
Perlだけど解説は参考になるかな
www.din.or.jp/~ohzaki/perl.htm#File_Lock

898 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 21:36:28 ]
>>896
Errno::EEXIST

899 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 08:41:51 ]
改良版。レースコンディションは無くなった……と思う
その代わり1回のロックで2つのディレクトリを作るため、効率はやや悪い
ttp://eload.run.buttobi.net/cgi-bin/img/e_261.zip

>>896
共有ロックだと、複数のロックを同時にかけられるから
「まずmkdirしてみて、失敗するならロックされている」という検出方法が使えなかった

900 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 16:44:54 ]
ボロボロじゃん。
教科書に載るようなちゃんと知られたアルゴリズムを調べて書いた方がいいと思うよ。






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

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

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