Tôi muốn xây dựng một trang web đơn giản có thể tải xuống một trang web www.example.com/index.html
và lưu trữ ảnh chụp nhanh của nó trên máy chủ khi khách hàng yêu cầu. Tôi đang nghĩ đến việc sử dụng lệnh wget
để tải xuống trang web. Ruby on Rails có thể xử lý công việc này không?Sử dụng wget qua Ruby trên Rails
Trả lời
Có.
Bạn có thể thực hiện shell commands in Ruby via back ticks, exec and system. Lưu ý rằng mỗi một trả về một cái gì đó hơi khác nhau:
lại ticks
wget http://www.yahoo.com
exec
:exec('wget http://www.yahoo.com')
system
:system('wget http://www.yahoo.com')
This blog post có vẻ giống như những gì bạn đang cố gắng thực hiện.
Bên cạnh đó, có một số thư viện Ruby tuyệt vời để làm điều này:
- mechanize với mechanize download - kiểm tra này railscast
- httparty - wrapper đơn giản xung quanh một more-difficult-to-use http library. Khi bạn nhận được phần thân phản hồi, bạn sẽ cần phải lưu nó vào cơ sở dữ liệu hoặc tệp.
- typhoeus - cơ chế đơn giản để làm theo yêu cầu http song song, nếu bạn cần một khả năng như vậy
Họ sẽ cung cấp một giao diện của Ruby tốt hơn sạch hơn để đối phó với các dữ liệu mà trở lại từ các yêu cầu khác nhau.
Cách tốt nhất để kiểm tra tất cả các tùy chọn này là sử dụng bảng điều khiển Rails. Chuyển đến thư mục gốc của ứng dụng Rails của bạn và nhập:
rails c
Khi ở trong bảng điều khiển, bạn có thể mô phỏng các cuộc gọi máy chủ thực tế.
Chạy wget
trong bảng điều khiển của bạn sẽ thả tệp trong thư mục gốc Rails của bạn, đó không phải là những gì bạn muốn. tmp
là thư mục chuẩn cho những thứ như vậy. Bạn có thể tự động tạo ra con đường dựa trên URL như vậy:
# 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}")
Hãy chắc chắn cũng bao gồm các tùy chọn từ this post
Cảm ơn! Hãy để tôi mất một thời gian để đi qua câu trả lời của bạn. Nhân tiện, khi tôi thực thi 'wget' bằng cách sử dụng' exec'/'system', làm cách nào tôi có thể chỉ định vị trí trên máy chủ để đặt các tệp? –
[Bài đăng trên blog] (http://blogforever.eu/blog/2011/05/21/creating-a-snapshot-of-a-blog-post-using-wget/) bạn đã đề cập là hoàn toàn đáng kinh ngạc. Điều này khá nhiều nên thay thế một nửa các viên đá quý ruby của trang phân tích tĩnh hiện có lỗi thời. –
By ảnh chụp, bạn có nghĩa là một hình ảnh, hoặc html cơ bản? –
Ah, ý tôi là cả html cơ bản lẫn bất kỳ hình ảnh/biểu định kiểu nào được liên kết với trang đó (tức là sử dụng tùy chọn -p của wget.) –