人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Ruby で リモートのファイル操作

Ruby でサーバを管理するスクリプトを書いています。
ssh で接続できるリモートサーバのファイルを簡単に
扱える方法はないでしょうか? 例えば FileText.exist?
を ssh 接続先の サーバのファイルに対して行ないたいです。
net::ssh や net::sftp を使えばできますか?

●質問者: naoya-i
●カテゴリ:コンピュータ インターネット
✍キーワード:NET Ruby SSH サーバ スクリプト
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● いわどん
●35ポイント

http://net-ssh.rubyforge.org/sftp/api/

net/sftpにopen-uriを応用した仕組みが用意されています。

example.comというホストの/foo/bar/baz.txtというファイルの存在を確認するには、例えば次のようにします。

require 'rubygems' # 不要であればこの行を外してください。
require 'uri/open-sftp'
open('sftp://example.com/foo/bar/baz.txt') do |f|
 # ...
end

ファイルが存在すれば f を経由してファイルにアクセスできます。ファイルが存在しなければ例外が発生します。詳しくはをご覧ください。

◎質問者からの返答

なるほど。ありがとうございます。


2 ● いわどん
●35ポイント

すみません、書き忘れてたことがありました。この回答に対するポイントはいりません。

先に示したスクリプト実行時に以下のような例外が発生することがあります。

C:/private/tools/ruby-1.8/lib/ruby/1.8/open-uri.rb:167:in `open_loop': undefined
 method `buffer_open' for #<URI::SFTP:0x14bbffc URL:sftp://example.com/foo/bar/baz.txt> (NoMethodError)
 from C:/private/tools/ruby-1.8/lib/ruby/1.8/open-uri.rb:165:in `open_loop'
 from C:/private/tools/ruby-1.8/lib/ruby/1.8/open-uri.rb:135:in `open_uri'
 from C:/private/tools/ruby-1.8/lib/ruby/1.8/open-uri.rb:531:in `open'
 from b.rb:7

その場合はuri/open-sftp.rbの末尾の方に以下のように書き加えてください。

 # この下の行から
 def buffer_open(buf, proxy, options)
 direct_open(buf, options)
 end
 # この上の行まで

 include OpenURI::OpenRead
 end

end

実は先に示したスクリプトもこの対策を行った後で試したものでした。失礼しました。

◎質問者からの返答

補足ありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ