オートリロードの設定がめんどいので設定をオートにする試み
オートリロードでリロードが楽になるのはいいんだけど、リロードさせるために設定をしたりとかするのがすっごいめんどく感じるようになってきたので設定もオートでやろうぜって思った。
Rinda::Ring は UDP で検索したり登録したりしてサービス呼び出せるライブラリで、これを使うと一瞬で上のようなことができちゃってオレスゲー感を味わえます。ちょーLL
まず tuplespace を起動する。以下のスクリプトそのまま。このタプルスペースはサービスの情報を統括してる。
require 'rinda/ring'
require 'rinda/tuplespace'
DRb.start_service
ts = Rinda::TupleSpace.new
place = Rinda::RingServer.new(ts)
DRb.thread.join
次に各種リロードサービスを tuplespace に登録するスクリプト。 こいつらはブラウザとともに常駐して、リロード要求をうけつける。これらはもちろん RingServer と同じホストで動いている必要はない。
以下は例
reloadfx.rb
#!/usr/bin/ruby
require 'rinda/ring'
require 'net/telnet'
class Reload
def reload
telnet = Net::Telnet.new({
"Host" => "localhost",
"Port" => 4242
})
telnet.puts("content.location.reload(true)")
telnet.close
end
end
reload = Reload.new
DRb.start_service(nil, reload)
provider = Rinda::RingProvider.new(:Reload, DRbObject.new(reload), 'Reload')
provider.provide
DRb.thread.join
reloadsafari.rb
#!/usr/bin/ruby
require 'rinda/ring'
require 'net/telnet'
class Reload
def reload
<<-`EOC`
osascript -e '
tell application "Safari"
do JavaScript "location = (location.href);" in document 1
end tell
'
EOC
end
end
reload = Reload.new
DRb.start_service(nil, reload)
provider = Rinda::RingProvider.new(:Reload, DRbObject.new(reload), 'Reload')
provider.provide
DRb.thread.join
でもって、上記サービスをタプルスペースから検索し、リロードメソッドを呼ぶスクリプト
#!/usr/bin/ruby
# reload.rb
require 'rinda/ring'
DRb.start_service
ts = Rinda::RingFinger.primary
ts.read_all([:name, :Reload, DRbObject, nil]).each do |i|
begin
p i[2].reload
rescue Exception => e
puts e.message
puts e.backtrace
end
end
この reload.rb を呼ぶだけで、何の設定もなしに、ネットワーク内のブラウザをリロードする。
新しくブラウザを起動したら同時にそのブラウザ用の Provider を起動すれば、それも何の設定もなしにリロードしてくれるってわけですよ。やばい!
Rinda::Ring さいこう>< DRb は Ruby の宝><
もうちょっといぢってみる。
関連エントリー
- XREA を rsync で更新する なんか GUI のクライアント使うのさえ面倒くさくなってきてミラーリングツールを使って更新することにした。 #!/usr/bin/ruby ...
- NiZ Keyboard PLUM のキーマップを macOS や Linux から書き換える 前回 に引き続き NiZ のキーマップをごにょごにょする。 とりあえず表題の通り、キーマップの書きかえまではできた。 レポジトリ: http...
- 数種類のタスクをタスクごとに別々の並列性ポリシー使いつつ、順次実行する (Java です) 例えばクローラみたいなのを書こうと思うと、 リモートからダウンロードしてくるタスク ストレージに格納するタスク メタデー...
- ruby-serialport で任意のボーレートを設定するには (ただし Linux に限る) ruby serialport は、このあたりで設定できるボーレートを列挙していて、これら以外のボーレートを設定できないようです (unkn...
- nginx の rewrite ルールっぽく h2o の mruby でリクエストの rewrite を行う このサイトのHTTPS化にあたって nginx で書いていた rewrite のルールを h2o の mruby で処理するように変える必要...