2013-07-02 81 views
11

Tôi làm việc với một số ứng dụng Rails, một số trên Rails 3.2/Ruby 2.0 và một số Rails 2.3/Ruby 1.8.7.Cải thiện thời gian khởi động Rails chậm (bảng điều khiển đường ray, máy chủ đường ray)

Điểm chung của chúng là vì chúng đã phát triển và thêm nhiều phụ thuộc/đá quý, chúng mất nhiều thời gian hơn và lâu hơn để bắt đầu. Phát triển, thử nghiệm, sản xuất, giao diện điều khiển, nó không quan trọng; một số mất 60 + giây.

Cách ưa thích đầu tiên, cấu hình cho những gì gây ra thời gian tải quá chậm và hai, cải thiện thời gian tải?

Trả lời

9

Ryan có tut tốt về đẩy nhanh tiến độ kiểm tra, giao diện điều khiển, nhiệm vụ rake: http://railscasts.com/episodes/412-fast-rails-commands?view=asciicast

Tôi đã kiểm tra tất cả các phương pháp đó và tìm thấy "spring" là tốt nhất. Chỉ cần chạy các tác vụ như

$ spring rspec 

Thời gian chạy mùa xuân đầu tiên của bạn sẽ giống như trước, nhưng giây và sau sẽ nhanh hơn nhiều.

Ngoài ra, từ kinh nghiệm của tôi sẽ có thời gian bạn cần phải ngừng máy chủ mùa xuân và khởi động lại khi có lỗi lạ, nhưng cơ hội là hiếm.

+1

Cảm ơn, Mùa xuân thật tuyệt vời! Nó phá vỡ rất nhiều thử nghiệm rspec/capybara của tôi mặc dù. – professormeowingtons

+1

Đáng buồn thay, 'mùa xuân', mặc dù nhanh và tuyệt vời, chắc chắn ghét rspec/capybara. – professormeowingtons

+0

@professormeowingtons, tại sao bạn lại nói vậy? Tôi đã sử dụng mùa xuân trong một thời gian dài và chạy rspec hàng ngày và cảm thấy tốt. –

0

Đối với ruby ​​2 ứng dụng, hãy thử zeus - https://github.com/burke/zeus

1,8 ứng dụng dường như khởi động nhanh hơn nhiều so với 1.9, Spork có thể giúp đỡ? http://railscasts.com/episodes/285-spork

+1

Không ai trong số đó thực sự giúp thời gian khởi động, họ chỉ cần kiểm tra ứng dụng sau khi khởi động ban đầu để bạn có thể vứt bỏ dĩa từ trạng thái ấm. Trong khi hữu ích, họ không giải quyết trực tiếp câu hỏi của OP. –

17

Có một vài điều có thể gây ra điều này.

  1. Quá nhiều thẻ GC và thiếu sót VM chung - Xem this answer để được giải thích toàn diện. Ruby < 2.0 có một số bit thực sự chậm có thể tăng đáng kể tốc độ tải; biên dịch Ruby với các bản vá lỗi Falcon hoặc railsexpress có thể giúp ích rất nhiều. Tất cả các phiên bản của MRI Ruby sử dụng cài đặt GC theo mặc định không phù hợp với các ứng dụng Rails.
  2. Nhiều đá quý kế thừa phải được lặp lại để tải tệp. Nếu bạn đang sử dụng trình chặn, hãy thử bundle clean. Nếu bạn đang sử dụng RVM, bạn có thể thử tạo một gemset mới.

Theo như lược tả, bạn có thể sử dụng ruby-prof để cấu hình những gì xảy ra khi bạn khởi động ứng dụng của mình. Bạn có thể bọc config/environment.rb trong khối ruby-prof, sau đó sử dụng để tạo báo cáo hồ sơ của một chu kỳ khởi động với một cái gì đó như rails r ''. Điều này có thể giúp bạn theo dõi nơi bạn dành phần lớn thời gian của mình để khởi động. Bạn cũng có thể cấu hình các phần riêng lẻ, như thiết lập trình bao trong boot.rb hoặc gọi #initialize! trong environment.rb.

Một số thứ bạn có thể không xem xét là thời gian chờ DNS. Nếu ứng dụng của bạn đang thực hiện tra cứu DNS khi khởi động mà không thể giải quyết được, những ứng dụng này có thể chặn quá trình cho $ timeout giây (có thể cao tới 30 trong một số trường hợp!). Bạn cũng có thể kiểm tra ứng dụng cho những ứng dụng đó.

+1

@professormeowingtons Bộ sưu tập rác và máy ảo –

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