6

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

4

1 回答 1

15

是的。

您可以通过反引号、 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. mechanize with mechanize download - 看看这个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}")

确保还包括这篇文章中的选项

于 2012-10-08T21:06:35.640 回答