ruby – 如何将文件从一台服务器复制到另一台服务器?

前端之家收集整理的这篇文章主要介绍了ruby – 如何将文件从一台服务器复制到另一台服务器?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一台服务器,只有xls日志文件.每个文件都是5-15Mb,并且在任何时候都可以添加文件的意义上它是动态的.现在我需要一种方法来使用 Ruby来执行以下过程.

>通过从一台服务器发送文件名来复制文件,该服务器除日志文件外只有其他服务器.
>我需要传递服务器密码作为参数.
>一切都在后台发生,这是从Ruby脚本触发的.

解决方法

查看 Net::SCPNet::SSH宝石.第一个允许您使用安全副本检索文件,第二个允许您轻松找到可供检索的文件名称.在Net :: SSH中,ssh.exec!将是你的朋友.

来自Net::SCP文档:

Net::SCP implements the SCP (Secure CoPy) client protocol,allowing Ruby programs to securely and programmatically transfer individual files or entire directory trees to and from remote servers. It provides support for multiple simultaneous SCP copies working in parallel over the same connection,as well as for synchronous,serial copies.

Net::SCP also provides an open-uri tie-in,so you can use the Kernel#open method to open and read a remote file:

  # if you want to read from a URL voa SCP:
  require 'uri/open-scp'
  puts open("scp://user@remote.host/path/to/file").read

Net::SSH文档:

require 'net/ssh'

Net::SSH.start('host','user',:password => "password") do |ssh|
  # capture all stderr and stdout output from a remote process
  output = ssh.exec!("hostname")

在上面的代码添加一个结尾以关闭块.在块内,输出将包含您发送的命令的结果.

从包含文件的机器通过Ruby检索文件的替代方法是让Ruby直接从托管文件的机器启动传输,并通过scp将它们推送到另一台机器.

您可以使用Net::SFTP在一个gem中管理它,而不是使用Net :: SCP和Net :: SSH.它也依赖于安全连接,但您可能无法使用SFTP. Net :: SFTP :: Operations :: Dir和Net :: SFTP :: Operations ::下载类和文档将成为您的朋友.

其他选项包括在@tadman提到的简单shell中使用标准rsync.有许多方法可以实现这一点,这是托管环境中的常见需求.

any other better approach?

rsync,在命令行.它非常智能,可以根据需要移动文件夹和文件的增量.另外,“How to transfer files using ssh and Ruby”及其与“Ruby file upload ssh intro”的链接.

Melding @ tadman对Ruby的rsync推荐,有“Cheapest rsync replacement (with Ruby)”.

猜你在找的Ruby相关文章