[#24705] yaiba (blade clone) 0.0.1 — Hideto ISHIBASHI <hideto-i@...4u.or.jp>
石橋秀仁です。こんにちは。
高橋征義です。遅いフォローですみません。
石橋秀仁です。高橋さん、フォローありがとうございます。
高橋征義です。
石橋秀仁です。
高橋です。
石橋秀仁です。高橋さん、メールありがとうございます。
高橋征義です。さらにYaiba読み中……。
石橋秀仁です。
[#24711] win32 で RDtool — Kazuhiro NISHIYAMA <zn@...>
http://www.geocities.co.jp/SiliconValley-Bay/4076/
いろいろ教えてもらって一応使えるようになったのですが、
なかだです。
nobu.nakada@nifty.ne.jp wrote:
なかだです。
message "[ruby-list:24715] Re: win32 で RDtool"
新井です。
From: Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
こんにちは、時田です。
なかだです。
From: Tokita Kousui <ktokita@where-i.net>
こんにちは、時田です。
From: Tokita Kousui <ktokita@where-i.net>
rubikitch <rubikitch@ruby-lang.org> wrote:
ども、時田です。
Tokita Kousui <ktokita@where-i.net> wrote:
ども、時田です。
Toshです。
なひです.
Wed, Sep 06, 2000 at 02:08:21AM +0900 において
From: Tokita Kousui <ktokita@where-i.net>
こんにちは、時田です
In message <20000907183039.A15360@sv.where-i.net>
はじめまして、渡辺@京大情報学です。
ども、時田です。
Toshです。
Toshiro Kuwabara <toshirok@yb3.so-net.ne.jp> wrote:
From: Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
[#24729] Net::IMAP — Shugo Maeda <shugo@...>
前田です。
ただただしです。
前田です。
ただただしです。
前田です。
[#24731] win32 Time zone — Kazuhiro Yoshida <moriq.kazuhiro@...>
もりきゅうです。
まつもと ゆきひろです
In message <E13VsUr-0006Cd-00@ev.netlab.zetabits.co.jp>
まつもと ゆきひろです
In message <E13VyUD-0006Un-00@ev.netlab.zetabits.co.jp>
参考までに、 FreeBSD では以下のようになりました。問題ないです。
[#24804] ruby-mode (Re: [ruby-dev:10833] Re: ruby 1.6.0 preview2) — Ryunosuke Ohshima <ryu@...>
大島と申します。ruby-listの方がふさわしいと思うので、動かしました。
[#24904] UDPSocket の送信元ポート番号の指定 — HiroshiSaito@...
こんにちは、サイトウです。
[#24911] PostgreSQL In CGI — Takayuki Tanaka <tanaka@...>
こんにちは Tanです。
[#24926] win32 版での TCPServer#addr, peeraddr の挙動 — OGATA Daisuke <Daisuke.Ogata@...>
緒方大介と申します.
[#24958] Installer test: ruby-1.6.0-preview — ARIMA Yasuhiro <fit0298@...>
有馬です。
小沢です。
有馬です。
小沢です。
有馬です。
有馬です。
小沢です。
有馬です。
小沢です。
有馬です。
わたなべです.
有馬です。
わたなべです.
小沢です。Win98でテストしてます。
有馬です。
小沢です。
再インストールの再報告です。
有馬です。
小沢です。
有馬です。
小沢です。
有馬です。
In-Reply-To: <200009201101.AA00851@fit0298.fitec.co.jp>
[#24968] media watch 2000.09.18 — Noritsugu Nakamura <nnakamur@...>
まつもと ゆきひろです
[#24969] UDPsocket#send <boradcast> でエラー — Hiroshi Saito <HiroshiSaito@...>
こんばんは、サイトウです。
[#24973] How to check all Thread fin ? — Sakae Kobayashi <sakae@...>
小林栄と申します。
前田です。
In message <87k8c9m2az.wl@studly.netlab.co.jp>
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
高橋征義です。
小林 栄です。
[#24991] Windows 環境での、 mod_ruby の作り方。 — ohara@...
小原ともうします。
[#25013] file separator for Ruby in Windows — TAKAHASHI Masayoshi <maki@...>
高橋征義です。
まつもと ゆきひろです
高橋征義です。
まつもと ゆきひろです
こんにちは。
高橋征義です。
まつもと ゆきひろです
高橋征義です。
artonです。
まつもと ゆきひろです
わたなべです.
まつもと ゆきひろです
artonです。
[#25025] build 1.6.0 on Tru64 (zipped SJIS file attached) — maili31s@... (SugHimsi)
すぎむし%Tru64 UNIX(Alpha マシン)で
[#25036] install guide draft for IRIX64 — Katsuyuki Komatsu <komatsu@...>
小松です。
[#25040] Re: file separator for Ruby in Windows — 小野工場設計部 <ind.onosetu1@...>
おがたといいます。
[#25055] What is this animal? — OZAWA -Crouton- Sakuro <crouton@...>
さくです。
[#25077] Ruby Entry Package ( ruby-1.6.1-mingw ) — ARIMA Yasuhiro <fit0298@...>
有馬です。
[#25084] configure で --with-sitedir が効かなくなる — Tatsuya BIZENN <bizenn@...>
備前と申します。
[#25092] http-access の get_data の指定サイズ — Makoto Ozawa <ozawa@...>
rubyの皆様、こんばんは。小沢です。
[#25109] assoc to rubyw.exe — ARIMA Yasuhiro <fit0298@...>
有馬です。
[#25143] ruby cal.rb on win32 — Kazuhiro Yoshida <moriq.kazuhiro@...>
もりきゅうです。
[#25147] media watch 2000.08.24 — Noritsugu Nakamura <nnakamur@...>
すぎむし。
高橋征義です。
[#25169] priority & ThreadGroup (Re: [ruby-dev:9438] Re: $SAFE) — Masatoshi SEKI <m_seki@...>
まつもと ゆきひろです
前田です。
前田です。
In message <87k8bn6dyy.wl@studly.netlab.co.jp>
なかだです。
[#25172] round method — WATABE Eiji <eiji@...>
はじめまして、わたべと申します。
[#25210] Find module — Ryuichi Tamura <tam@...>
田村と申します。
[#25222] Programming Ruby — TAKAHASHI Masayoshi <maki@...>
高橋征義です。
[#25230] mswinでのワイルドカード — "M_Otake" <masaota@...>
はじめまして。大竹といいます。
[#25253] 256 倍本邪道編 — Noritsugu Nakamura <nnakamur@...>
[ruby-list:24790] Re: yaiba (blade clone) 0.0.1
石橋秀仁です。こんにちは。自己レスです。 yaibaに入っているdoracle.rbは、Webアプリケーションサーバでいうところの 「DBコネクションプーリング機能」をdRubyサービスとして提供しています。 つまり、リモートホスト上でクエリを発行したり、その結果をRubyのArrayなどの オブジェクトとして返したりできます。 コネクションプーリングの部分は他のソフトでも役に立ちそうなので、 抜き出して添付します。少し書き換えるといろいろと使えると思います。 添付サンプルの使い方: at foo.hoge.jp $ ruby doracle.rb druby://foo.hoge.jp:17640 at bar.hoge.jp $ ruby clnt.rb druby://foo.hoge.jp:17640 ["00-09-05"] 注意)doracle.rbのDB接続が完了する前にclnt.rbを実行すると、 まだfoo.hoge.jpでdRubyサービスが立ち上がっていないので、 connection refusedになったりします。 カスタマイズの仕方: ご使用の際は、Doracle#studentsのようなメソッドを、 アプリケーションに応じて追加することになります。 そのメソッドはクライアント側で、 dqueue = DRbObject.new(nil, there) doracle = dqueue.pop result = doracle.students # => Array or something のように呼び出します。 yaibaでは、このWebアプリケーションサーバを、eRubyスクリプトから 呼び出しています。つまり、ネットワーク透過なので、将来的には Gnutella方式みたいな分散DBにもしてみたいと思ってます :-) Hideto ISHIBASHI <hideto-i@rr.iij4u.or.jp> wrote: > yaiba (blade clone) のソースを公開します。 > http://www.rr.iij4u.or.jp/~hideto-i/rb/archive/yaiba-0.0.1.tar.gz > 基本的にRDBMSと心中することになりました。Oracleで動いてます。 > PostgreSQLでも動かしたいです。PStore版も、たぶん動くと思いますけど。 -- 石橋秀仁 hideto-i@rr.iij4u.or.jp http://www.rr.iij4u.or.jp/~hideto-i/index.html
Attachments (4)
# Copyright (c) 2000 Hideto "rubyholic" ISHIBASHI. All Rights Reserved.
require 'thread'
require 'singleton'
require 'oracle'
require 'drb/drb'
require 'drbrefid'
class DoracleQueue
include DRbUndumped
include Singleton
def initialize
@conf = Config.instance
@user = @conf['doracle']['user']
@passwd = @conf['doracle']['passwd']
@service = @conf['doracle']['service']
@minsvr = @conf['doracle']['minimum servers']
@wait = @conf['doracle']['wait']
@que = Queue.new
@minsvr.times do @que.push(new_connection) end
Thread.start { watch_loop }
end
def pop
@que.pop
end
private
def watch_loop
loop do
@que.push(new_connection) until @que.length == @minsvr
sleep @wait
end
end
def new_connection
Doracle.new(@user, @passwd, @service)
end
end
class Doracle
include DRbUndumped
def initialize(user, passwd, service)
@conn = ::Oracle.new(user, passwd, service)
end
def terminate
@conn.logoff
end
=begin # application specific methods... change as you like
def students # sample method
retval = []
begin
cur = @conn.exec('select name from class_master')
cur.fetch do |row|
retval.push(row[0])
end
rescue OCIError
p $!
ensure
cur.close
end
retval
end
=end # application specific methods... change as you like
def exec(sql)
retval = []
begin
cur = @conn.exec(sql)
cur.fetch do |row|
retval.push(row[0])
end
rescue OCIError
p $!
ensure
cur.close
end
retval
end
end
class Config
# system-wide configuration like Windows' registories
include Singleton
def initialize
@hash = Hash.new # { 'conf name' => 'value', 'foo' => 5, ... }
@mutex = Mutex.new
end
def store(key, value)
@mutex.synchronize do
@hash.store(key, value)
end
end
alias []= store
def fetch(key)
@mutex.synchronize do
@hash.fetch(key)
end
end
alias [] fetch
end
if __FILE__ == $0
Thread.abort_on_exception = true
# config
eval(File.open('conf.rb').read)
conf = Config.instance
uri = conf['doracle']['druby uri']
tout = conf['doracle']['druby timeout']
print(uri, "\n")
# daemon
pid = fork
if pid.nil?
# child process
$stdout.close
$stdin.close
$stderr.close
queue = DoracleQueue.instance
DRb.install_id_conv(DRbRefIdConv.new(tout))
DRb.start_service(uri, queue)
DRb.thread.join
end
# parent process
exit 0
end
require 'thread'
class DRbRefIdConv
def initialize(time_to_live)
@time_to_live = time_to_live
@thr_table = {} # {id => object}
@obj_table = {} # {id => killer thread}
@thr_sync = Mutex.new
@obj_sync = Mutex.new
end
def to_obj(id)
obj = ObjectSpace._id2ref(id)
set_killer(id)
reset_obj(id, obj)
obj
end
def to_id(obj)
id = obj.id
set_killer(id)
reset_obj(id, obj)
id
end
# note: set_killer before reset_obj
def reset_obj(id, obj)
@obj_sync.synchronize do
@obj_table[id] = obj
end
end
private
def set_killer(id) # reset killer
@thr_sync.synchronize do
thr = @thr_table[id]
Thread.kill(thr) if thr
@thr_table[id] = killer(id)
end
end
def killer(id)
Thread.start do
sleep(@time_to_live)
reset_obj(id, nil) # remove id from table
end
end
end
# configuration file: Ruby script file
parameters = {
'doracle' => {
'user' => 'kumo',
'passwd' => 'kumosuke',
'service' => 'fire',
'minimum servers' => 5,
'wait' => 0.1,
'druby uri' => 'druby://localhost:17640',
'druby timeout' => 30, # second
},
}
parameters.each_pair do |key, value|
Config.instance.store(key, value)
end
require 'drbrefid'
require 'drb/drb'
there = ARGV.shift
unless there
$stderr.puts("usage: #{$0} <server_uri>")
exit 1
end
DRb.start_service
doracle = DRbObject.new(nil, there)
conn = doracle.pop
result = conn.exec('select sysdate from dual')
p result