12/08/2018, 17:00

Build thử Ruby 2.5 với Docker

Ruby 2.5.0 được ra mắt bản chính thức vào dịp giáng sinh năm ngoái và được phát hành bởi nhiều công cụ quản lý version quen thuộc như -- rvm, rbenv, chruby, homebrew và hôm nay chúng ta sẽ sử dụng một công cụ mới và phổ biến khác đó là Docker. Về Docker chắc hẳn các bạn đã nghe về nó và sự tiện lợi ...

Ruby 2.5.0 được ra mắt bản chính thức vào dịp giáng sinh năm ngoái và được phát hành bởi nhiều công cụ quản lý version quen thuộc như -- rvm, rbenv, chruby, homebrew và hôm nay chúng ta sẽ sử dụng một công cụ mới và phổ biến khác đó là Docker. Về Docker chắc hẳn các bạn đã nghe về nó và sự tiện lợi mà nó mang lại rồi. còn nếu ai chưa biết thì có thể tham khảo thêm google. Docker được sử dụng ở tất cả các khía cạnh sản xuất, thử nghiệm hoặc phát triển sản phẩm. trong bài viết này chúng ta sẽ nghiêng về khía cạch phát triển hơn. khi một phiên bản mới ruby được phát hành để có thể vọc những tính năng mới nhưng lại k muốn mạo hiểm cài đặt quản lý những phiên bản có sẳn thì Docker là một lựa chọn thuận tiện nhất để làm công việc này. Bằng cách sử dụng Docker, chúng ta có thể xóa image khi chúng ta hoàn tất. Không phải ai cũng có thể chuyển sang phiên bản Ruby mới nhất ngay lập tức. Với phương pháp này, chúng ta có thể thử Ruby 2.5.0 mà không cần phải cài đặt vĩnh viễn.

Đầu tiên chúng ta kéo một image ruby từ Docker Hub

docker run -it --rm ruby:2.5

Nếu đây là lần đầu tiên bạn chạy lệnh, Docker sẽ kéo image từ từ trên docker hub về và khi câu lệnh được được thực hiện xong, nó sẽ bắt đầu là một chương trình mặc định. Trong trường hợp này là irb.

Unable to find image 'ruby:2.5' locally
2.5: Pulling from library/ruby
723254a2c089: Pull complete 
abe15a44e12f: Pull complete 
409a28e3cc3d: Pull complete 
503166935590: Pull complete 
0f46f97746e4: Pull complete 
9d641d922d2f: Pull complete 
891f591c9621: Pull complete 
825fab4554b7: Pull complete 
Digest: sha256:090577ac73868da6c74a2c5d716e67189e8f6c597b1d4bfbe61e8a68c829c02e
Status: Downloaded newer image for ruby:2.5
irb(main):001:0> RUBY_VERSION
=> "2.5.0"

Đã xong bây giờ bạn có thể thử nhưng tính năng mới trên ruby 2.5 rồi đấy Ví dụ: ví dụ chúng ta có thể thử yield_self . là một method mới của version 2.5 :

irb(main):002:0> 3.yield_self{ |x| x*x }
=> 9

và bây giờ nếu bạn muốn xem đoạn code này nó hoạt động như thế nào ở phiên bản củ hơn thì chúng ta chỉ cần sử dụng docker và kéo về 1 phiên bản củ hơn. 2.4 chẳng hạn

$ docker run -it --rm ruby:2.4
irb(main):001:0> RUBY_VERSION
=> "2.4.3"
irb(main):002:0> 3.yield_self{ |x| x*x }
NoMethodError: undefined method `yield_self' for 3:Integer
    from (irb):2
    from /usr/local/bin/irb:11:in `<main>'

và một chức năng tôi muốn thử nữa là việc kiểm tra xem các Gem cho rails app của tôi có chạy trơn chu trên version ruby mới nhất không ở đây tôi sử dụng ví dụ là Engine Yard's todo app

docker run -it --rm -v /Users/crigor/projects/todo:/todo ruby:2.5 bash

Lênhj này sử dụng -v để tạo ra một volume. nội dung của thư mục Users/crigor/projects/todo sẻ có sẵn bên trong container/todo. sau đó bên trong docker chúng ta run lệnh: bundle install.

root@7c0b216b97c3:/# cd todo
root@7c0b216b97c3:/todo# bundle install
Fetching gem metadata from https://rubygems.org/..............
.
.
.

An error occurred while installing puma (2.10.2), and Bundler cannot continue.
Make sure that `gem install puma -v '2.10.2'` succeeds before bundling.

chúng ta có thể thây rằng puma 2.10.2 không cài đặt được trên Ruby 2.5.0. Nhìn vào các phiên bản puma có sẵn , chúng ta có thể thấy rằng 2.10.2 là một phiên bản cũ nên tôi đã cố gắng cập nhật lên phiên bản mới nhất và nó đã được cài đặt thành công.

root@7c0b216b97c3:/todo# bundle update puma

Trong khi puma 2.10.2 là cũ, lưu ý rằng nó vẫn có thể được cài đặt thành công mà không có vấn đề gì khi ở phiên bản Ruby 2.4.3. Ta thấy đó là những vấn đề như thế mà chúng ta có thể dễ dàng được kiểm tra bằng cách sử dụng Docker. Không phải ai cũng có thể cập nhật phiên bản Ruby mới nhất, đặc biệt là trong production. Hàu hết chúng ta thường muốn ổn định khi đã lên production nên viên nên viện nâng cấp version ruby là việc cần được chuẩn bị kỹ lưỡng. Cám ơn các bạn đã xem.

0