yaml 格式經常會在 rails 裡看到,像是 config 裡的 database.yml,或 en.yml
這種格式經常拿來寫一些固定的常數。
因此也可以拿來設定網頁中固定的像是選單之類的文件。
自訂 yaml
sample.yml
1
2
3
4
5
6
7
| option:
- a: foo
a1: bar
- b: foo
b1: bar
- c: foo
c1: bar
|
:
hash
-
array
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| require "yaml"
SAMPLE = YAML.load(File.read(File.expand_path('../sample.yml', __FILE__))).symbolize_keys.freeze
or
SAMPLE = YAML.load_file('sample.yml')
#=> {"option"=>
# [
# {"a"=>"foo", "a1"=>"bar"},
# {"b"=>"foo", "b1"=>"bar"},
# {"c"=>"foo", "c1"=>"bar"}
# ]
# }
|
symbolize_keys
symbolize_keys
freeze
設定檔
再 /config
底下建立 yml & yml.example
並將 yml 的放進 .gitignore
,避免敏感資訊,傳到 github 上面
上 production 的時候,再將 example 的複製過來,將密碼改成 production 的即可。
/config/fb.yml
1
2
3
4
5
6
7
| development:
app_id: xxxxxxxxxxxxxxxx
secret: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
production:
app_id: xxxxxxxxxxxxxxxx
secret: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
然後再需要的地方就可以直接使用了
1
2
3
| fb_config = Rails.application.config_for(:fb)
fb_config["app_id"] #=> xxxxxxxxxxxxxxxx
fb_config["secret"] #=> xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
在 yaml 寫 ruby code
config/urls.yml
1
2
3
4
5
6
7
8
| development:
PATH: <%= Rails.public_path %>
test:
PATH: <%= Rails.public_path %>
production:
PATH: <%= Rails.public_path %>
|
config/initializers/load_config.rb
1
2
| #用 ERB.new().result 將檔案讀出時,透過此 method 轉成 ruby code
URL = YAML.load(ERB.new(File.read("#{Rails.root}/config/urls.yml")).result)[Rails.env].symbolize_keys.freeze
|
1
2
3
| config_for(:urls)
Rails.application.config_for(:urls)
#自動就會判斷環境設定
|
也可以用 rails 內建的 config_for
來讀取 .yml
檔案
config_for
官方文件:
Yaml
ERB.html
參考文件:
Using ERB in YAML Configuration File