Computer >> Máy Tính >  >> Lập trình >> Ruby

Tôi có nên nâng cấp lên Ruby 2.1 không?

Tôi sẽ trả lời điều đó bằng ảnh chụp màn hình:

{% img img-responsive /images/posts/ruby-2-1-improvement.png 645 259 Tôi gọi đó là một lời đồng ý lớn%}

Chúng tôi đã nâng cấp từ Ruby 1.9 lên 2.1 trong quá trình sản xuất khoảng một tuần trước và đây là những gì chúng tôi đã thấy. Phần màu xám ở dưới cùng là thời gian thu thập trang phục của chúng tôi sẽ gần như không có gì. Nhìn chung, bản nâng cấp đã cải thiện 15-20% thời gian phản hồi của máy chủ. Điều đó mà không cần thực hiện bất kỳ điều chỉnh GC bổ sung nào!

Chúng tôi đã thấy tốc độ thu thập dữ liệu của Google và Bing đã tăng mạnh sau khi vận chuyển nâng cấp, điều này đặc biệt tuyệt vời đối với các trang web như của chúng tôi, được hưởng lợi nhiều từ lưu lượng truy cập công cụ tìm kiếm.

Tuyệt, vậy nó khó đến mức nào?

Trên một ứng dụng Rails lớn với gần 150 gem phụ thuộc, bản nâng cấp sẽ đặt một cam kết nhỏ duy nhất và một vài ngày thử nghiệm. Chúng tôi chạyrvm trên tất cả các máy chủ của mình và cung cấp vớichef, do đó, việc nâng cấp tất cả các máy chủ của chúng tôi lên 2.1 cũng đơn giản như thay đổi số phiên bản trong tệp vai trò đầu bếp.

Chúng tôi đã gặp phải vấn đề gì?

Chúng tôi vẫn sử dụng iconv để chuyển ngữ, vì vậy chúng tôi phải bao gồm đá quý theiconv, thay thế tính năng tích hợp sẵn đã bị loại bỏ khỏi 2.x. Tôi không bao giờ có thể getruby-debug hoặc gem thedebugger hoạt động dưới 2.x, vì vậy chúng tôi chuyển sang pry andpry-byebug. Vẫn thích đá quý của trình gỡ lỗi hơn là pry-byebug, nhưng pry tốt hơn rất nhiều so với irb nên nó giống như một sự rửa sạch. Deivid Rodriguez, tác giả của byebug, đã chỉ ra rằng các vấn đề của tôi với pry-byebug có thể không phải do byebug gây ra. Anh ấy đã hoàn toàn đúng! (nó thực sự bị thu hút bởi sự tương tác giữa byebug và pry) .

Trong môi trường hỗn hợp 1.9 và 2.1, bạn cũng sẽ phải nâng cấp bộ gộp lên 1.5.1. Với phiên bản mới của Bundler, bạn có thể chỉ định 2.1 làm yêu cầu nền tảng trong Gemfile của mình:

gem 'iconv', '~> 1.0.2', :platform => [:mri_20, :mri_21]

Có vẻ như GitHub gặp phải một số vấn đề khác với 2.1, được Aman Gupta đề cập trong ý chính này:https://gist.github.com/tmm1/8393897. Nhưng chúng tôi chưa nhận thấy bất kỳ vấn đề nào.

Bạn cũng sẽ muốn điều chỉnh GC sau khi giao hàng để đạt được tốc độ cao hơn nữa. Aman có một bài viết hay với rất nhiều chi tiết về cách thực hiện điều đó:https://tmm1.net/ruby21-rgengc/. Loạt Theentire 2.1 trên blog của anh ấy rất đáng đọc nếu bạn muốn nhận được lợi ích tối đa từ việc nâng cấp Ruby đơn giản, rẻ tiền của mình.