LoginSignup
2
2

More than 5 years have passed since last update.

[druby] リモートのファイル内容をサクッと取得する。

Last updated at Posted at 2014-12-13

セキュリティ的には、問題があるが、
サクッと リモートマシンのファイル内容を取得するのに druby を使えます。

server.rb, client.rb の2つのファイルから構成します。

server.rb
# coding: utf-8

# See http://docs.ruby-lang.org/ja/2.0.0/library/drb.html

require 'drb/drb'
require "open3"

# 通信を待ち受ける URI
URI="druby://localhost:8787"

class RunCommandServer
  def read(file_path)
    File.new(file_path).read
  end

  def command(command)
    Open3.capture3(command)
  end
end

# サーバ側でリクエストを受け付けるオブジェクト
FRONT_OBJECT = RunCommandServer.new

# サーバを起動する
# DRb.start_service(URI, FRONT_OBJECT, :safe_level => 1)
 DRb.start_service(URI, FRONT_OBJECT, :safe_level => 0)
# DRb のスレッドが終了するのを待つ
DRb.thread.join
client.rb
# coding: utf-8

# See http://docs.ruby-lang.org/ja/2.0.0/library/drb.html
require 'pp'
require 'drb/drb'

# 接続先の URI
SERVER_URI="druby://localhost:8787"

# DRbサーバを起動する
# この例には必要ないが、front オブジェクト以外の
# リモートオブジェクトのメソッドを呼び出す時には必要
DRb.start_service
# リモートオブジェクトの取得
rpc = DRbObject.new_with_uri(SERVER_URI)

# リモートメソッドの呼び出し
pp rpc.command('cat server.rb')
pp rpc.read('server.rb')

コードは 同一マシン(localhost) 用になっているけど、サーバー指定を書き換えればよいはず。
localhost 上では次のようにして動作確認できる。

2 つ端末を開く。
1 つ目の端末で  "ruby server.rb"
2 つ目の端末で "ruby clinet.rb"
==> 2 つ目の端末に server.rb の内容が表示される。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2