New FAMILUG

The PyMiers

Tuesday 4 November 2014

[Ruby] Cài đặt/sử dụng rbenv

Cho những ngày tháng không Facebook :">

Vì sao chọn rbenv ?

  • Nhẹ
  • Cài đặt đơn giản
  • Sử dụng dễ
  • Mỗi folder 1 gem version khác nhau được, hoặc set 1 version dùng chung (global)
  • Không cần quyền sudo, user bình thường cũng có thể cài ruby và deploy 1 ruby app.

 

Cài đặt RBENV

Hướng dẫn cài đặt này đã test cho Ubuntu 12.04 LTS.

Cài cái gói phụ thuộc (Dependency packages)
Phần này cần sudo để cài.

sudo apt-get install autoconf bison buixld-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev git curl


Cài rbenv

curl https://raw.githubusercontent.com/fesplugas/rbenv-installer/master/bin/rbenv-installer | bash

Cấu hình bash
Thêm đoạn sau vào file ~/.bashrc

export RBENV_ROOT="${HOME}/.rbenv"
if [ -d "${RBENV_ROOT}" ]; then
  export PATH="${RBENV_ROOT}/bin:${PATH}"
  eval "$(rbenv init -)"
fi

Kiểm tra
Dùng rbenv -v nếu output ra như sau là cài rbenv thành công

rbenv 0.4.0-129-g7e0e85b

Cài đặt ruby

Sau khi đã cài rbenv, ta có thể cài các version ruby thích hợp.
Dùng rbenv install -l để list các version của ruby có thể cài đặt:

rbenv install -l
Available versions:
1.8.7-p249
1.8.7-p302
1.8.7-p302
1.8.7-p334
1.8.7-p334
1.8.7-p352
....

Giả sử cài ruby 2.0.0-p353

~$ rbenv install 2.0.0-p353
Downloading yaml-0.1.6.tar.gz...
http://dqw8nmjcqpjn7.cloudfront.net/7da6971b4bd08a986dd2a61353bc422362bd0edcc67d7ebaac68c95f74182749
Installing yaml-0.1.6...
Installed yaml-0.1.6 to /home/xxx/.rbenv/versions/2.0.0-p353
Downloading ruby-2.0.0-p353.tar.gz...
http://dqw8nmjcqpjn7.cloudfront.net/465afc77d201b5815bb7ce3660a1f5a131f4429a3fa483c126ce66923e4726cc
Installing ruby-2.0.0-p353...
Installed ruby-2.0.0-p353 to /home/xxx/.rbenv/versions/2.0.0-p353

Lúc này gõ ruby -v sẽ không ra version. Bởi vì chúng ta mới chỉ cài ruby chứ chưa thiết lập chế độ chạy cho nó là global (system) hay local (in folder).

Để khách quan, tôi sẽ cài thêm bản ruby 1.9.3-p547, để hiểu rõ hơn về sử dụng rbenv.

rbenv install 1.9.3-p547
Installed ruby-1.9.3-p547 to /home/xxx/.rbenv/versions/1.9.3-p54

OK, giờ kiểm tra các version ruby đã cài trên máy:

~$ rbenv versions
1.9.3-p547
2.0.0-p353

Đó là 2 bản ta vừa cài. Nếu bạn muốn dùng 2.0.0-p353 cho system:

~$ rbenv global 2.0.0-p353

Lúc này lệnh ruby -v sẽ cho version 2.0.0 của ruby

~$ ruby -v
ruby 2.0.0p353 (2013-11-22 revision 43784) [x86_64-linux]

Bạn đã có thể dùng ruby 2.0.0 cho hệ thống của bạn.
Chú ý, khi dùng với rbenv ruby path không còn là /usr/bin/ruby hay /bin/ruby nữa, nó sẽ kết quả của lệnh:

~$ which ruby
/home/xxx/.rbenv/shims/ruby

Nếu muốn dùng các path trên, hãy sử dụng lệnh ln để tạo alias (shortcut) tương ứng.

ln -s /home/xxx/.rbenv/shims/ruby /usr/bin/ruby

============

Quay trở lại với bản 1.9.3, giả sử hệ thống cần chạy ruby 2.0.0 nhưng có 1 ruby app chỉ hỗ trợ ruby 1.9.3. Lúc này, cần set ruby version cho local (version áp dung cho 1 folder).

Di chuyển đến folder cần thiếp lập version, ví dụ, tôi chọn là billing-cli:

~$ cd billing-cli/

Thiết lập local version:

~$ rbenv local 1.9.3-p547

Lúc này, nếu chạy ruby -v trong folder billing-cli sẽ cho output

~$ ruby -v
ruby 1.9.3p547 (2014-05-14 revision 45962) [x86_64-linux]

Toàn bộ đoạn lệnh test 2 version của ruby trên 1 hệ thống:

~/billing-cli$ ruby -v
ruby 1.9.3p547 (2014-05-14 revision 45962) [x86_64-linux]
~/billing-cli$ cd .. # chuyển lên folder cha
~$ ruby -v
ruby 2.0.0p353 (2013-11-22 revision 43784) [x86_64-linux]

Chú ý, với kiểu chạy local, rbenv sẽ tạo 1 file .ruby-version trong thư mục sử dụng chứa version của ruby khai báo cho folder đó.

~/billing-cli$ ls -la
...
-rw-rw-r-- 1 billing billing 11 Oct 25 10:25 .ruby-version

~/billing-cli$ cat .ruby-version
1.9.3-p547

Khi dùng với git, bạn cần ignore file này ra.

Conclusion

- Nếu bạn chỉ cần cài 1 version ruby để dùng: Đọc đến chỗ ============
- Nếu bạn cần nhiều hơn thì đọc đến đây.
- rbenv help để có nhiều thông tin hơn
rbenv help <tên command> để xem help của lệnh.
- Bạn có thể dùng Tab để autocomplete các lệnh/version của rbenv

- LamDT

3 comments:

  1. ngày xưa, cũng một lần không FB và anh Nâm đã hoàn thành trang familug bằng codeigniter, khởi đầu cho một sự nghiệp pờ hắc cơ đầy lừng lẫy :3

    ReplyDelete
  2. bài này không thấy nói tại sao dùng rbenv mà ko phải renv, xin anh cho chỉ thị :3

    ReplyDelete
  3. > ln -s /home/xxx/.rbenv/shims/ruby /usr/bin/ruby

    câu này cần sudo

    ReplyDelete