dRuby25周年だった!
RECORD / 江口寿史、初のジャケットアートワーク集。LPサイズのイラスト全29点、本人による全作品解説、吉田拓郎の寄稿文、銀杏BOYZ・峯田和伸とのスペシャル対談を収録した超豪華画集!
片桐さんからのギフトで、25年前の今日、dRubyをメーリングリストに投稿したことを思い出した。いただいたバージョンは緑のシールになってる(amazonの写真は茶色)。何種類あるんだろうか。
dRubyのプロキシー的なもの
最近、dRubyを使う機会が多い。イントラネットのRWikiをホストしているマシンのリプレイスのために、旧マシンのRWikiを稼働させながら新マシンに移行する実験をしてる。
旧マシンのRWikiのDRbObjectを操作(RMI)すると、自動的に新マシンを操作するようにしたいなーと思ってプロキシを書いてみた。 ORG_URIが旧マシン、NEW_URIが新マシンだよ。
require 'drb' DRb.start_service(ORG_URI, DRbObject.new_with_uri(NEW_URI))
短い。
別マシンへのエクスポート
旧マシンのページを新マシンにコピーしたい。
RWikiのfrontオブジェクト(dRubyで最初に反応する係)にはデータをファイルに出力する口がついている。
def export(port, since) n = 0 @book.each {|x| next unless x.modified next if x.modified < since Marshal.dump([x.name, x.src, x.modified], port) n += 1 } n end
exportは指定した日よりも新しく更新されたページをファイルに出力する。
稼働中のRWikiのfrontオブジェクトにexportをRMIすればよい。 仮引数portはMarshal.dumpの書き込み先である。 通常はIO等を渡すのだが、今回はdRubyなので(RWikiサーバーにとっては)リモートのFileを渡すことになる。 *1
クライアントはこんな感じ。クライアントはFileオブジェクトの暗黙的なサーバーになるので、DRb.start_serviceが必要。
DRb.start_service rwiki = DRbObject.new_with_uri('druby://hogehgoe:8470') File.open('hoge.dump', 'wb') {|fp| rwiki.export(fp, Time.new(2024, 7, 1)) }
もちろん、同じマシンに限らず、別のマシンからもRMIできるので、同じスクリプトでexportできるのである。
dRuby25周年を物理的に祝おう!
(物理じゃないのも混じってた)
suzuri
amazon
dRubyによる分散・Webプログラミング https://www.amazon.co.jp/hz/wishlist/ls/1R43BBPSPUEEE/r
☕️
Masatoshi Seki is creating code. - Buymeacoffee
AIタイトルべんり!
*1:Marshalも内部で変なショートカットしないでオブジェクトへのメソッド呼び出しで書いてるから動くんだよなー。