iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 28
0
自我挑戰組

今晚我想來點 Ruby on Rails 系列 第 28

<Day 28>如何使用環境變數

  • 分享至 

  • xImage
  •  

一個環境變數是一個鍵值對,看起來像這樣:

KEY=VALUE

在主機裡的所有程式使用環境變數分享設定值,環境變數的例子:

設定預設的修改者,告訴 ruby 哪裡去找 gems (GEM_PATH / GEM_HOME)、傳送 API keys 到應用程式而且不要 commit 到版控系統、定義操作系統要從哪裡尋找二元檔案(Windows 的 .exe 檔)、讓 Rails 從測試/開發/產品模式下開始執行

可以發現一堆的環境變數 & env 指令在 Linux / Mac 裡 & set 指令在 Windows 裡,例子:

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
# ...

這份環境變數的名單可以非常的長,但是並不需要去死記。可以印出所有的 gem-specific 變數 & gem env 的指令設定。如果想要從 ruby 存取這些環境變數,有一個特別的物件可以使用。

使用環境變數

Ruby 有 ENV 物件看起來像是一個 hash,這個物件可以讓使用者存取所有可以讓使用者操作的環境變數。例如可以看有多少的 key:

ENV.size
# 48

拿到 key 的名單:

ENV.keys

存取特定的 key:

ENV["GEM_HOME"]
# "/home/jesus/.gem/ruby/2.6.0"

甚至可以使用像是 map & select 方法:

ENV.select { |k,v| k.size < 4 }

但是如何在 ruby 外設定環境變數?

如何設定環境變數

可以設定一次性的環境變數,像是:

API_KEY=1 ruby -e 'p ENV["API_KEY"]'

在終端機使用、 irb 之外, ruby 可以存取這個 API_KEY 的值,也可以在 rails 模式做到。舉個例子:

RAILS_ENV=production rails console

如果輸入 API_KEY=1 ...這個環境變數只會被這個指令呼叫,如果要設定從現在的終端機的其他指令也可以呼叫:

export API_KEY=1
Now if you do:

ruby -e 'p ENV["API_KEY"]'

這樣會得到 1,而且沒有前綴變數。另外,不要在 ruby 裡使用 ENV 設定, ENV 是用來讀取從 ruby 之外額外的設定。


上一篇
<Day 27>今晚我想點 ruby on rails 的 MVC
下一篇
<Day 29>加油好嗎?撰寫自己的類別
系列文
今晚我想來點 Ruby on Rails 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言