我想建立一个简单的网站,可以www.example.com/index.html
在客户端请求时下载网页并将其快照存储在服务器上。我正在考虑使用命令wget
下载网页。Ruby on Rails 能够处理这个任务吗?
问问题
10394 次
1 回答
15
是的。
您可以通过反引号、 exec 和 system 在 Ruby 中执行 shell 命令。请注意,每个返回的东西都略有不同:
后记号
`wget http://www.yahoo.com`
exec
:exec('wget http://www.yahoo.com')
system
:system('wget http://www.yahoo.com')
这篇博客文章似乎与您正在尝试做的事情相同。
此外,还有几个很棒的 Ruby 库可以做到这一点:
- mechanize with mechanize download - 看看这个railscast
- httparty - 一个更难使用的 http 库的简单包装器。获得响应正文后,您需要将其保存到数据库或文件中。
- 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 回答