通过Ruby on Rails使用wget

我想建立一个简单的网站,可以下载网页www.example.com/index.html并在客户端请求时将其快照存储在服务器上。 我正在考虑使用命令wget下载网页。 Ruby on Rails能够处理这个任务吗?

是。

您可以通过back ticks,exec和system在Ruby中执行shell命令 。 请注意,每个返回略有不同的东西:

  1. 背蜱

     wget http://www.yahoo.com 
  2. exec

     exec('wget http://www.yahoo.com') 
  3. system

     system('wget http://www.yahoo.com') 

这篇博文似乎与你想要做的事情一脉相承。

此外,有几个非常棒的Ruby库用于执行此操作:

  1. 机械化与机械化下载 – 看看这个railscast
  2. httparty – 围绕一个更难以使用的http库的简单包装。 获得响应正文后,您需要将其保存到数据库或文件中。
  3. typhoeus – 如果您需要这样的能力,可以并行制作http请求的简单机制

它们将提供更好的更清晰的Ruby接口,用于处理从各种请求返回的数据。


测试所有这些选项的最佳方法是使用Rails控制台。 转到Rails应用程序的根目录并键入:

 rails c 

进入控制台后,您可以模拟实际的服务器调用。

在控制台中运行wget会将文件丢弃到Rails根目录中,这不是您想要的。 tmp是这类事物的标准目录。 您可以根据URL动态生成路径,如下所示:

 # tmp directory path = Rails.root.join('tmp') # create sub-directory as md5 hash based on URL sub_dir = Digest::MD5.hexdigest(url) # append sub_dir on the path destination_path = path.join(sub_dir) system("wget -P #{destination_path} #{url}") 

请务必也包含此post中的选项