Nâng cấp một số Rails app chỉ cần bundle update rails.
Nhưng nếu bạn có loại app khác thì sao? Những app vẫn chạy Rails 4.0, thậm chí 3.2, vì bạn không muốn kéo chúng "kicking and screaming" vào tương lai?
Dù bạn đối mặt với nâng cấp nhanh hay đau đớn, các bước sau sẽ giúp đưa app lên Rails 4.2 suôn sẻ nhất. Quá trình đó cũng giúp bạn tận dụng trọn vẹn tính năng mới của Rails 4.2.
Đọc hướng dẫn nâng cấp
Luôn bắt đầu nâng cấp Rails bằng cách đọc Rails Upgrade Guide.
Hướng dẫn sẽ dẫn dắt bạn qua hầu hết thay đổi lớn giữa các version Rails. Nó nói chính xác cách thay đổi app để sửa những vấn đề lớn nhất bạn sẽ gặp. (Ví dụ, thay đổi này trong Rails 4.1 đã gây cho chúng tôi giờ đồng hồ đau khổ nếu không biết để đề phòng.)
Hơn thế, hướng dẫn giải thích tại sao nên làm những thay đổi đó. Điều đó quan trọng, vì giúp bạn hiểu nên theo dõi gợi ý nào, và có thể bỏ qua cái nào.
Nếu muốn hiểu sâu hơn về thay đổi Rails 4.2, hãy đọc release notes. Chúng giới thiệu tất cả tính năng mới tuyệt vời của Rails 4.2 mà bạn sắp sử dụng. Ít nhất nó sẽ động viên bạn hoàn thành nâng cấp.
Nâng cấp từng bước
Khi chuyển sang version Rails mới, luôn nâng cấp lên point version mới nhất trước. Và không bỏ qua minor version.
Ví dụ, muốn nâng cấp từ 4.1.6 lên 4.2, hãy đi 4.1.6 → 4.1.9, rồi 4.1.9 → 4.2. Nếu bắt đầu từ 4.0.12, đi 4.0.12 → 4.0.13, rồi 4.0.13 → 4.1.9, rồi 4.1.9 → 4.2. Có vẻ nhiều việc hơn, nhưng sẽ tiết kiệm thời gian về lâu dài.
Tại sao?
Point version mới nhất của một Rails release có deprecation warning tốt nhất.
Đừng đánh giá thấp sự hữu ích của deprecation warning. Nếu nâng cấp từng bước, chúng sẽ báo chính xác gì sẽ bị vỡ và cách ngăn chặn. Nếu nhảy quá xa, app sẽ vỡ đơn giản, và bạn không biết tại sao.
Cuối cùng, nếu nâng cấp point version (như 4.0.9 → 4.0.13) làm vỡ test, nó thường cũng vỡ khi nâng cấp major/minor. Nhưng những vấn đề đó dễ debug và sửa hơn khi ít thay đổi hơn.
Vậy làm như sau:
- Nâng cấp lên point release mới nhất của version Rails hiện tại của app.
- Nâng cấp các gem khác cản trở
bundle update. - Sửa test, commit khi cần.
- Sửa deprecation warning, commit khi cần.
- Nâng cấp lên minor/major version tiếp theo của Rails, và lặp lại.
Dựa vào test
Khi nâng cấp Rails, test sẽ là dấu hiệu đầu tiên cho thấy có chuyện không ổn. Chúng nên là thứ bạn chạy đầu tiên, và sửa đầu tiên. Đừng cố gắng boot Rails app trước khi test hầu như pass hết.
Nâng cấp gem
Khi test fail, và không thấy lỗi do bạn, thường là gem nào đó cần cập nhật.
Nâng cấp Rails là lúc tệ nhất để nâng cấp gem. Vì quá nhiều thứ thay đổi trong app, khó phân biệt là nâng cấp Rails làm vỡ, hay nâng cấp gem làm vỡ, hay bạn làm vỡ.
Nhưng vì một số gem phụ thuộc sâu vào Rails internals, bạn buộc phải làm. Nếu sass bị lỗi, nâng cấp sass-rails gem. Và hy vọng nó không làm mọi thứ tệ hơn.
Ghi chép nhiều
Nếu nâng cấp Rails đặc biệt khó khăn, bạn sẽ phải thử nghiệm. Sẽ debug, sửa code, đổi test.
Khi làm vậy, bạn sẽ quên những thay đổi đã làm. Những thứ bạn thử gần đúng nhưng chưa đủ. Test nào bạn định xem tiếp. Nơi khác cần sửa code. Mẹo chia sẻ cho đồng nghiệp đang nâng cấp app của họ lên Rails 4.2. Hành vi lạ, muốn kiểm tra kỹ sau.
Bạn không muốn làm thay đổi, rollback, nhận ra đó đúng là việc nên làm, nhưng không nhớ làm gì. Vậy hãy ghi chép lại.
Một vài tài nguyên khác
Trong comment, Miha Rekar chỉ ra RailsDiff, hiển thị khác biệt giữa Rails app mới sinh dưới các version Rails khác. Cách tuyệt vời để học param cấu hình không còn cần, hoặc param mới nên thêm.
Và Daniel Kehoe viết hướng dẫn toàn diện cập nhật Ruby và Rails dùng RVM và RVM gemsets.
Nâng cấp Rails tốt nhất có thể
Một số nâng cấp Rails suôn sẻ. Chuyện cứ chạy. Những cái khác thách thức, kéo dài nhiều ngày hoặc tuần. Tùy vào app, phụ thuộc, và những gì Rails thay đổi cụ thể. Nhưng nếu làm theo các bước này, bạn sẽ có trải nghiệm nâng cấp tốt nhất có thể.
Bạn đã lên Rails 4.2 chưa? Nâng cấp thế nào? Chỉ cần cập nhật một đống gem, hay vẫn đang truy đuổi test fail cuối cùng?
(Ghi chú nhanh: Tôi sẽ phát hành Practicing Rails ngày 11 tháng 2! Vậy bạn chỉ còn vài tuần để lấy giảm giá 25% early access.)