2009-02-12 64 views
17

Tôi tự hỏi nếu có ai có bất kỳ plugin hoặc công thức nấu ăn capistrano nào sẽ "làm nóng" bộ đệm trang cho ứng dụng đường ray bằng cách xây dựng tất cả các trang được lưu trong bộ nhớ cache tại thời điểm triển khai được thực hiện hoặc cục bộ trước khi triển khai diễn ra."Warm Up Cache" khi triển khai

Tôi có một số trang web chủ yếu là tĩnh không thay đổi nhiều và sẽ chạy nhanh hơn nếu html đã được viết, thay vì yêu cầu một khách truy cập truy cập trang web.

Thay vì tự tạo bản thân này (có vẻ dễ dàng nhưng ưu tiên thấp hơn) thì nó đã tồn tại chưa?

Trả lời

1

Tôi đã đặt kiểm tra tích hợp xác nhận tất cả các khu vực chính của trang web khả dụng (tổng cộng vài trăm trang). Họ không làm bất cứ điều gì thay đổi dữ liệu - chỉ cần kéo lại các trang và biểu mẫu.

Tôi hiện không chạy chúng khi triển khai cá thể sản xuất của mình, nhưng bây giờ bạn đề cập đến nó - đó thực sự có thể là một ý tưởng hay.

Một giải pháp thay thế khác là kéo tất cả các trang xuất hiện trong sơ đồ trang web của bạn (nếu bạn có, có thể bạn nên sử dụng). Nó sẽ thực sự dễ dàng để viết một kịch bản gem/rake mà làm điều đó.

18

Bạn có thể sử dụng wget hoặc chương trình khác để thu thập dữ liệu trang web. Trong thực tế, loại kịch bản này được đề cập đến như một trong những cách sử dụng trong trang hướng dẫn sử dụng của nó:

Tùy chọn này yêu cầu Wget xóa từng tệp mà nó tải xuống sau khi thực hiện. Tính năng này hữu ích cho việc tìm nạp trước các trang phổ biến thông qua proxy, ví dụ:

wget -r -nd --delete-after http://whatever.com/~popular/page/ 

Tùy chọn -r là truy xuất đệ quy và -nd để không tạo thư mục.

+0

Có, chúng tôi có một vài yêu cầu curl trong kịch bản triển khai của chúng tôi, một cách không chỉ để làm ấm bộ nhớ cache, mà còn chỉ để có được máy chủ và chạy (ví dụ: đầu tiên yêu cầu nginx + hành khách có thể mất 40 giây hoặc hơn) – tardate

2

Tải trước theo cách này - nói chung, với một công việc cron bắt đầu lúc 10 giờ chiều Thái Bình Dương đến và kết thúc vào lúc 6 giờ sáng theo giờ miền Đông - là một cách tốt để cân bằng tải trang web của bạn.

Kiểm tra spider_test rails plugin để biết cách đơn giản để thực hiện việc này khi thử nghiệm.

Nếu bạn định sử dụng wget ở trên, hãy thêm tùy chọn --level =, --no-parent, --wait = SECONDS và --waitretry = SECONDS để điều chỉnh tải của bạn và bạn cũng có thể đăng nhập và nắm bắt được phản ứng tiêu đề cho chẩn đoán hay phân tích (thay đổi đường dẫn từ/tmp nếu muốn):

wget -r --level=5 --no-parent --delete-after \ 
    --wait=2 --waitretry=10 \ 
    --server-response  \ 
    --append-output=/tmp/spidering-`date "+%Y%m%d"`.log 
    'http://whatever.com/~popular/page/' 
4

tôi sử dụng một nhiệm vụ cào trông như thế này để làm mới trang của tôi cache sitemap mỗi đêm:

require 'action_controller/integration' 
ActionController::Base::expire_page("/sitemap.xml") 
app = ActionController::Integration::Session.new 
app.host = "notexample.com" 
app.get("/sitemap.xml") 

Xem http://gist.github.com/122738

+0

Tôi thích phương pháp này bằng cách sử dụng đường ray. Ví dụ nói chung tôi vô hiệu hóa wget như là khách hàng cho tất cả các trang của tôi do rogue trang cạo. – dc10

+0

Tôi không chắc chắn phiên bản đường ray nào đã giới thiệu thay đổi, nhưng trên đường ray 4.2, tôi cần 'require 'action_dispatch/testing/integration'' và sau đó khởi tạo với' app = ActionDispatch :: Integration :: Session.new Rails.application' – andialles

Các vấn đề liên quan