Một biến môi trường là một cặp khóa/giá trị, nó trông như sau:
KEY=VALUE
Chúng ta dùng các biến này để chia sẻ tùy chọn cấu hình giữa tất cả chương trình trong máy tính của bạn.
Đó là lý do tại sao quan trọng phải học cách chúng hoạt động & cách truy cập chúng từ chương trình Ruby của bạn dùng đối tượng đặc biệt ENV.
Ví dụ biến môi trường:
- Cấu hình trình soạn thảo mặc định
- Chỉ cho Ruby biết nơi tìm gem (
GEM_PATH/GEM_HOME) - Truyền API key vào ứng dụng, không cần commit vào source control (git)
- Định nghĩa nơi hệ điều hành tìm tệp nhị phân (.exe trong Windows)
- Làm Rails khởi động ở chế độ test/development/production
Bạn có thể tìm danh sách TẤT CẢ biến môi trường của bạn với lệnh env trong Linux/Mac & lệnh set trong Windows.
Ví dụ:
PWD=/home/jesus SHELL=/usr/bin/zsh RUBY_ENGINE=ruby RUBY_VERSION=2.6.0 GEM_ROOT=/opt/rubies/ruby-2.6.0/lib/ruby/gems/2.6.0 # ...
Danh sách có thể khá dài, nhưng bạn không cần ghi nhớ.
Bạn cũng có thể in tất cả biến và cấu hình đặc thù gem với lệnh gem env.
Bây giờ:
Nếu bạn muốn truy cập các biến môi trường này từ Ruby có một đối tượng đặc biệt bạn có thể dùng.
Hãy khám phá nó hoạt động như thế nào!
Sử Dụng Biến Môi Trường Trong Ruby
Ruby có đối tượng ENV này hoạt động như một hash & cho bạn truy cập tất cả biến môi trường có sẵn cho bạn.
Dưới đây là một số ví dụ…
Bạn có thể biết bạn có bao nhiêu khóa:
ENV.size # 48
Lấy danh sách chúng:
ENV.keys
Và truy cập khóa cụ thể:
ENV["GEM_HOME"] # "/home/jesus/.gem/ruby/2.6.0"
Bạn thậm chí có thể dùng các phương thức như map & select:
ENV.select { |k,v| k.size < 4 }
Nhưng bạn thiết lập các biến môi trường này bên ngoài Ruby như thế nào?
Cách Thiết Lập Biến Môi Trường
Bạn có thể thiết lập biến môi trường cho một lần sử dụng.
Như sau:
API_KEY=1 ruby -e 'p ENV["API_KEY"]'
Dùng điều này trong terminal, bên ngoài irb, thì Ruby sẽ có quyền truy cập giá trị API_KEY này.
Điều này hữu ích cho API key, nhưng cũng để đặt chế độ Rails.
Ví dụ:
RAILS_ENV=production rails console
Nhớ:
Điều này thiết lập biến môi trường cụ thể này cho tiến trình bạn đang khởi chạy ngay bây giờ.
Có nghĩa là nếu tôi làm API_KEY=1 …
Nó chỉ hoạt động cho lệnh đó!
Nếu bạn muốn biến này được dùng bởi tất cả lệnh khác bạn khởi chạy từ phiên terminal hiện tại.
Làm thế này:
export API_KEY=1
Bây giờ nếu bạn làm:
ruby -e 'p ENV["API_KEY"]'
Bạn sẽ nhận được 1, ngay cả khi không có biến tiền tố.
Cảnh báo:
Đừng dùng ENV cho cấu hình bên trong ứng dụng Ruby của bạn, đó KHÔNG phải mục đích của nó. ENV chỉ để đọc cấu hình bên ngoài đến từ bên ngoài Ruby.
Thử gem như dry-configurable cho tùy chọn cấu hình nội bộ.
Thuộc Tính Quan Trọng Của Biến Môi Trường
Bạn có thể thấy các thuộc tính này hữu ích vì chúng giải thích (có thể hành vi bất ngờ).
- Snapshotting, biến môi trường được thiết lập khi bạn khởi chạy chương trình & không bị ảnh hưởng bởi thay đổi bên ngoài
- Môi trường đóng, thay đổi biến bên trong một tiến trình (chương trình Ruby của bạn là một tiến trình) không thay đổi biến môi trường bên ngoài tiến trình
- Biến môi trường không vĩnh viễn, khi bạn khởi động lại máy tính, hoặc thậm chí khi bạn đóng terminal, thay đổi biến môi trường bị mất (dù bạn dùng
exportLinux + Mac /settrong Windows)
Hãy ghi nhớ những điều này!
Rails Credentials
Rails 5.2 giới thiệu hệ thống mới giúp bạn quản lý API key.
Nó hoạt động bằng cách lưu credentials trực tiếp vào config/credentials.yml.enc, đây là tệp mã hóa bạn chỉ có thể đọc nếu có tệp master.key.
Ý tưởng là bạn chỉ commit credentials.yml.enc & giữ khóa riêng tư.
Làm sao thêm credentials mới?
Vâng, bạn không thể chỉnh sửa tệp .enc trực tiếp.
Dùng lệnh này thay vào đó:
bin/rails credentials:edit
Đây là tệp YAML, hãy chắc chắn định dạng đúng.
Bây giờ:
Bạn có thể đọc credentials từ ứng dụng Rails của bạn như sau…
Rails.application.credentials.github_api_key
Xem Video Hướng Dẫn
Tóm Tắt
Bạn đã học về biến môi trường, công cụ hữu ích cho phép bạn quản lý cấu hình hệ điều hành & giữ API key riêng tư.

Vui lòng chia sẻ bài viết này với bạn bè của bạn để nhiều người hơn có thể tìm thấy nó 🙂
Cảm ơn bạn đã đọc!